Java设计模式_(结构型)_装饰模式
来源:互联网 发布:windows配置git服务器 编辑:程序博客网 时间:2024/05/22 01:42
引用百科
装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
特点
(1) 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。
(2) 装饰对象包含一个真实对象的引用(reference)
(3) 装饰对象接受所有来自客户端的请求。它把这些请求转发给真实的对象。
(4) 装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。
1. 需要扩展一个类的功能,或给一个类添加附加职责。
2. 需要动态的给一个对象添加功能,这些功能可以再动态的撤销。
3. 需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变的不现实。
4. 当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。
● 抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。
● 具体构件(ConcreteComponent)角色:定义一个将要接收附加责任的类。
● 装饰(Decorator)角色:持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口。
● 具体装饰(ConcreteDecorator)角色:负责给构件对象“贴上”附加的责任。
相关代码:
1、抽象角色接口
public interface Component {public void operation();}
public class RealComponent implements Component{@Overridepublic void operation() {System.out.println("具体操作...");}}
public class Decorator implements Component {private Component component;public Decorator(Component c) {this.component = c;}@Overridepublic void operation() {this.component.operation();}}
4、装饰角色具体实现
public class RealDecoratorA extends Decorator {public RealDecoratorA(Component c) {super(c);}@Overridepublic void operation() {super.operation();System.out.println("...自定义处理A...");}}
public class Client {public static void main(String[] args) {// TODO Auto-generated method stubComponent c = new RealComponent();RealDecoratorA a = new RealDecoratorA(c);a.operation();}}个
附加到原来具体实现RealComponent上,运行之后输出
具体操作...
...自定义处理A...
优点:
1. Decorator模式与继承关系的目的都是要扩展对象的功能,但是Decorator可以提供比继承更多的灵活性。
2. 通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。
缺点:1. 这种比继承更加灵活机动的特性,也同时意味着更加多的复杂性。
2. 装饰模式会导致设计中出现许多小类,如果过度使用,会使程序变得很复杂。
设计原则:
1. 多用组合,少用继承。
利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为。然而,如果能够利用组合的做法扩展对象的行为,就可以在运行时动态地进行扩展。
2. 类应设计的对扩展开放,对修改关闭。
阅读全文
1 0
- Java设计模式_(结构型)_装饰模式
- 设计模式_结构型模式_装饰模式
- Java设计模式_结构型_装饰模式_是海军还是空军
- java设计模式_装饰模式
- java设计模式11_装饰模式
- Java 设计模式_装饰器模式
- Java设计模式_(结构型)_适配器模式
- Java设计模式_(结构型)_组合模式
- Java设计模式_(结构型)_外观模式
- Java设计模式_(结构型)_桥接模式
- Java设计模式_(结构型)_代理模式
- Java设计模式_(结构型)_享元模式
- 设计模式_装饰模式
- java基础_设计模式_装饰者模式
- 23种设计模式(8)_结构型_装饰者模式(Decorator Pattern)
- 30_装饰设计模式
- Java设计模式_结构型_桥接模式_以不变应万变
- Java设计模式_结构型_适配器模式_丑小鸭与白天鹅
- 智能机器人上演“最强大脑”,化身安全助手护航云安全
- 阿里云Maven仓库
- 串口USART UART 接收结束标志是怎么回事 这是一种自己定义的协议 没有通用协议
- C#之WinForm WebBrowser实用技巧汇总
- 【Oracle】对RID为偶数的记录进行操作
- Java设计模式_(结构型)_装饰模式
- qlineedit tab焦点处无法输入问题
- 公证在知识产权维权中的地位不可动摇
- bzoj3613: [Heoi2014]南园满地堆轻絮
- 【时间序列】时间序列分割聚类算法TICC
- React Native 入门(三)
- 用户行为日志-js埋点(二) 实现细节
- JAVA Class类
- request和转发