动态地将责任附加到对象上。
(扩展功能,装饰者是比继承更有弹性的替代方案)
1.现有一个组件(对象),需要增加它的行为
2.采用装饰者模式扩展它。
3.首先是定义一个装饰者继承组件的父类接口,让装饰者获得与被装饰对象同样的类型。这里的目的不是继承被装饰者的行为。
4.因为装饰者需要代替被装饰者,所以它们必须是同一类型,这对使用者来说,总是用的同一类型,几乎没有任何变化。
5.装饰者中的行为是如何来的?是通过组合装饰者,得到了装饰者的行为。如:
public class Decorator{
Component component;//组合了装饰者,可以得到被装饰者的行为
public Decorator(Compoment compoment){
this.compomemt = compomemt;
}
public void method(){
//增加的行为逻辑...
component.method();//得到了具体被装饰者的行为
//增加的行为逻辑...
}
}
6.因为组合的是被装饰者的父类,所以可以传入任何子类,增加了弹性。
7.如果想要增加新的行为,就可以重新写一个装饰者,而不用更改原来的代码。
8.如何装饰最开始的组件的?就像这样:
//Component1是Component的子类
Compoment component1 = new Decorator(new Component1());
// Decorator和component1都是Component类型,这样完全没问题。装饰者的构造器中接收被装饰者,通过组合,得到了被装饰者的行为。
Java I/O
design-mode-demo/src/pattern/decorator/