九、装饰器模式Decorator(结构型)
来源:互联网 发布:倒带和彩虹歌词知乎 编辑:程序博客网 时间:2024/05/18 00:25
装饰器模式可以动态地给一个对象添加一些额外的职责。就添加功能来说,既可以通过生成子类的方式添加,也可以使用装饰器模式添加,但是使用装饰器模式时更加灵活。通过装饰器模式,可以将组件嵌入另外一个对象,然后使用这个对象增强原对象的功能,从而达到装饰的目的。
public interface Component {public void operation();}public class ConcreteComponent implements Component{@Overridepublic void operation() {System.out.println("Do my original job!");}}public class Decorator implements Component{protected Component component = null;public Decorator(Component component){this.component = component;}@Overridepublic void operation() {component.operation();}}public class ConcreteDecoratorA extends Decorator{private String addedState = null;public ConcreteDecoratorA(Component component) {super(component);addedState = "Initialed";}public void operation(){super.operation();System.out.println(String.format("Also change state! From %s to Operated.", addedState));addedState = "Operated";}}public class ConcreteDecoratorB extends Decorator{public ConcreteDecoratorB(Component component) {super(component);}public void operation(){super.operation();addedBehavior();}private void addedBehavior(){System.out.println("Another behavior added!");}}public class Client {@Testpublic void test(){Component comp1 = new ConcreteComponent();//AComponent decA = new ConcreteDecoratorA(comp1);//BComponent decB = new ConcreteDecoratorB(decA);decB.operation();}}
Component作为通用组件的接口,表示统一的对外接口,ConcreteDecorator是实现基础功能的类,Decorator提供装饰器的基类,它内部提供Component类型的引用,将来子类可以为这个Component添加新的装饰,ConcreteDecoratorA为基础的ConcreteComponent添加addedState状态,而ConcreteDecoratorB为基础的ConcreteComponent添加了AddedBehavior()方法,用来添加额外的特性。
装饰器模式可以在不影响其他对象的情况下,动态、透明的方式给单个对象添加职责,而且可以处理那些可以撤销的职责,使用装饰器模式也比单纯的继承要好很多,因为装饰器可以在运行时动态的增加删除职责(通过将不同的装饰器实现交给Client来达到动态性),而且装饰器模式还可以避免层次结构的高层有太多特征,通过将这些特征分散到不同的装饰器中,并组合这些特征就能达到多种多样的效果。
装饰器模式有一个比较大的缺点就是会产生大量的小对象,而且它们会很相似,这些小对象都包含着一些原有的基础对象之外的功能,是对原对象的功能拓展。对于了解这些系统的人来说,定制这些功能会比较容易,但是学习起来相对困难。Java中的IO系统就是使用装饰器模式的很好的例子。
从组合上来看,Decorator和Adapter很相似,但是它们的目的不同,Decorator是在不影响接口的基础上为原接口的实现类添加新的功能,而Adapter的目的是为了将Adaptee对象转化为Target接口类型的对象,中间牵扯到接口类型的转变。
0 0
- 九、装饰器模式Decorator(结构型)
- 装饰器模式Decorator(结构型)
- 九、结构模式之装饰(Decorator)模式
- 结构型模式-----装饰模式(decorator)
- Decorator模式(装饰模式 结构型)
- 设计模式--装饰器模式Decorator(结构型)
- Decorator 装饰(结构型模式)
- 结构型模式:Decorator(装饰)
- Decorator装饰设计模式(结构型)
- 结构型模式之装饰(Decorator)
- 装饰模式Decorator(结构型)
- Decorator装饰(结构型模式)
- 【结构型模式】decorator(装饰)
- 结构型模式-装饰(decorator)
- 设计模式-结构型模式:装饰器模式 Decorator
- 【设计模式】结构型模式之装饰器Decorator
- 7种结构型模式之:装饰器模式(Decorator)
- 设计模式(8)--Decorator(装饰器模式)--结构型
- codefoces #364 div2 E &&div 1 B Connecting Universities [图论]【求贡献】
- 字符串
- 常用类思维导图
- 数据结构实验之栈三:后缀式求值
- Codeforces 115B Lawnmower
- 九、装饰器模式Decorator(结构型)
- javascript简介
- XUtils网络请求封装类
- 数据库cmd命令行
- 小猫统计:完善了查询字段
- Android WIFI Debug AndroidStudio/Eclipse 无需 Root 无线调试
- Java内存区域
- 来电归属地显示
- 强引用、弱引用、软引用、虚引用