装饰模式主要用于为某个现有的类添加某个功能,扩展现有的类的功能一般有两种方式,一种是通过继承,一种是通过对象组合,第一种是比较强行植入的方式,而第二种就比较灵活,其实设计模式中有很多都可以看到这种方式的影子,它本质上是通过植入具有相同接口的对象,植入哪个对象就由哪个对象来实现这个功能,通过需要达到的效果植入不同的对象,被植入对象的框架都保持原样,这就达到了复用的效果。

回到装饰模式,使用装饰模式的目的在于透明,动态地为某个类扩展某个功能,这里的透明指的是所有对原对象的装饰对于被装饰的对象来说是不知情的,对原对象一点都不会产生影响。
装饰模式还有个用途就是可以用于控制功能的访问权限问题。

public abstract class AbsComponent {
public abstract void OriginalComponent();
}
public class ConcreComponent extends AbsComponent {
public void OriginalComponent() {
System.out.println("This is from OriginalComponent");
}
}
public abstract class AbsDecorator extends AbsComponent{
protected AbsComponent component = null;
public AbsDecorator(AbsComponent conponent) {
this.component = conponent;
}
public void OriginalComponent() {
component.OriginalComponent();
}
}
public class ConcreDecorator extends AbsDecorator {
public ConcreDecorator(AbsComponent conponent) {
super(conponent);
}
public void selfFunction() {
System.out.println("extend the original function with self function");
super.component.OriginalComponent();
}
}
public class Client {

public static void main(String args[]) {
AbsComponent component = new ConcreComponent();
ConcreDecorator decorator = new ConcreDecorator(component);
decorator.selfFunction();
}
}
Contents