设计模式之装饰者模式
来源:互联网 发布:华讯网络 电科软信 编辑:程序博客网 时间:2024/06/08 18:23
1.什么是装饰模式
装饰模式又称为包装(Wrapper)模式,装饰模式以客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。
特点:扩展特定对象的功能,不是扩展某个类的功能;不需要子类,防止由于子类带来的复杂和混乱;对于一个给定对象,同时可能有不同的装饰对象,客户端可以通过它的需要选择合适的装饰对象。
2.装饰模式的结构
装饰模式以对客户端透明的方式为某个对象动态的附加更多功能,换言之,客户端不会觉得对象在装饰前后有什么区别。装饰模式可以在不使用创造更多子类的情况下,将对象功能进行扩展。
装饰者类图:
抽象构件(Component)角色:给出一个抽象接口,以规范接受附加责任的对象;
具体构件(ConcreteComponent)角色:定义一个接受附加责任的类;
装饰(Decorator)角色:持有一个构件对象的实例,并定义一个与抽象构件接口一致的接口;
具体装饰(ConcreteDecorator)角色:负责给构件对象贴上附加责任;
代码实现
/抽象构件角色 public interface Component(){ public void sampleOption(); } //具体构件角色 public class ConcreteComponent implements Component(){ public void sampleOption(){ //some codes } } //装饰角色 public Decorator implements Component(){ private Component component; public Decorator(Component component){ this.component = component; } public void sampleOption(){ this.component.sampleOption(); } } //具体装饰角色 public class ConcreteDecorator extends Decorator(){ public ConcreteDecorator(Component component){ super(component); } public void sampleOption(){ this.component.sampleOption(); //增加一些功能 } } ------------------------------------------------------------------//抽象构件角色public interface Component(){ public void sampleOption();}//具体构件角色public class ConcreteComponent implements Component(){ public void sampleOption(){ //some codes }}//装饰角色public class Decorator implements Component(){ private Component component; public Decorator(Component component){ this.component = component; } public void sampleOption(){ this.component.sampleOption(); }}//具体装饰角色public class ConcreteDecorator extends Decorator(){ public ConcreteDecorator(Component component){ super(component); } public void sampleOption(){ this.component.sampleOption(); //增加一些功能 }}
阅读全文
0 0
- 设计模式之装饰者设计模式
- 设计模式 之 装饰者
- 设计模式之装饰者模式
- 设计模式之装饰者模式
- 设计模式之Decorator(装饰者模式)
- 设计模式之五---装饰者模式
- 设计模式之---装饰者模式
- c++设计模式之装饰者模式
- Php设计模式之装饰者模式
- java设计模式之装饰者模式
- 设计模式之装饰者模式
- 【设计模式】之装饰者模式
- HeadFirst设计模式之装饰者模式
- c++设计模式之装饰者模式
- 设计模式之装饰者模式
- 设计模式之--装饰者模式
- 设计模式之装饰者模式
- 设计模式之装饰者模式
- 时间戳与Date形式互换
- linux下解压命令大全
- coursera week2题目
- Spark学习笔记(11)源码解读之Driver中的ReceiverTracker架构
- linux系统的目录结构
- 设计模式之装饰者模式
- HDOJ1811 稍微复杂一点的拓扑排序应用
- LINUX之系统分区及挂载的概念
- Spark学习笔记(12)源码解读之Executor容错安全性
- Java —— 多线程笔记 一、线程创建、启动、生命周期、线程控制
- 2017 java程序员面试宝典
- HDU 1671 Phone List(字典树Trie)
- 设计模式的应用场景(17)--职责链模式
- CentOS 7下源码安装MySQL 5.7