设计模式(9)-结构型-装饰模式(Decorator)
来源:互联网 发布:达梦数据库6.0下载 编辑:程序博客网 时间:2024/06/06 08:39
概述
动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。可以简称为"修修补补"
适用性
- 1.在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
- 2.处理那些可以撤消的职责。
- 3.当不能采用生成子类的方法进行扩充时。
参与者
- 1.Component 定义一个对象接口,可以给这些对象动态地添加职责。
- 2.ConcreteComponent 定义一个对象,可以给这个对象添加一些职责。
- 3.Decorator 维持一个指向Component对象的指针,并定义一个与Component接口一致的接口。
- 4.ConcreteDecorator 向组件添加职责。
其基本类图如下图所示:
示例:
package com.sql9.structured;abstract class Component {public abstract void draw();}class ConcreteComponent extends Component {private String name;public ConcreteComponent(String name) {this.name = name;}@Overridepublic void draw() {System.out.println(String.format("ConcreteComponent - %s", name));}}abstract class Decorator extends Component {protected Component internalComponent;public void setComponent(Component c) {this.internalComponent = c;}@Overridepublic void draw() {if (internalComponent != null) {internalComponent.draw();}}}class ConcreteDecorator extends Decorator {private String customName;public ConcreteDecorator(String name) {this.customName = name;}@Overridepublic void draw() {extraDraw();super.draw();}protected void extraDraw() {System.out.println("Draw extra action in ConcreteDecorator...");}}public class DecoratorTest {public static void main(String[] args) {ConcreteComponent c = new ConcreteComponent("This is the real component");ConcreteDecorator d = new ConcreteDecorator("This is a decorator for the component");d.setComponent(c);d.draw();}}
结果:
Draw extra action in ConcreteDecorator...
ConcreteComponent - This is the real component
- [设计模式-结构型]装饰模式(Decorator)
- 设计模式(9)-结构型-装饰模式(Decorator)
- Decorator装饰设计模式(结构型)
- 结构型设计模式---Decorator模式(装饰模式)
- 设计模式中结构型模式(四)装饰模式(Decorator)
- (C++设计模式) ------Decorator装饰模式-- 结构型模式
- 设计模式-结构型模式:装饰器模式 Decorator
- 设计模式深入学习---Decorator装饰模式(结构型模式)
- Decorator装饰(结构型模式)
- 【结构型模式】decorator(装饰)
- 结构型模式-装饰(decorator)
- 装饰模式decorator(结构型设计模式)
- 【设计模式基础】结构型模式 - 3 - 装饰者(Decorator)
- 设计模式--装饰器模式Decorator(结构型)
- 结构型设计模式---装饰者模式(Decorator)
- 设计模式(结构型)之装饰者模式(Decorator Pattern)
- JAVA设计模式(7) —<结构型>装饰模式(Decorator)
- 设计模式(3)-结构型-装饰模式(Decorator)
- iPhone开发【九】多视图技术总结之二:Tab Bar
- C++内存管理详解(一)
- javadoc的命令及使用
- VC6.0工程中配置EGE图形库时的设置
- LBP-(续)
- 设计模式(9)-结构型-装饰模式(Decorator)
- web项目转移was7遇到的问题
- 国家集训队论文分类整理
- java程序员看的书
- oracle连接远程数据库配置介绍
- C++内存管理详解(二)
- 纹理特理-LBP的扩展STLBP
- C++内存管理详解(三)
- 正则帖子