装饰者(Decorator)模式定义
1)装饰者模式:动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则(ocp)
//定义一个抽象层面的功能接口
public interface Sourceable {
public void method();
}
public class Source implements Sourceable {
@Override
public void method() {
System.out.println("the original method!");
}
}
//装饰类
public class Decorator implements Sourceable {
private Sourceable source;
public Decorator(Sourceable source){
super();
this.source = source;
}
@Override
public void method() {
System.out.println("before decorator!");
source.method();
System.out.println("after decorator!");
}
}
//测试
public static void main(String[] args) {
Sourceable source = new Source();
Sourceable obj = new Decorator(source);
obj.method();
}
优点:
有效的把类的核心职责和装饰功能区分开了,而且可以去除相关类中重复的装饰逻辑
装饰是继承的有力补充,比继承灵活,动态扩展,即插即用
不同顺序排列组合装饰类可以实现不同效果
遵守开闭原则
缺点:
会增加许多子类,使得程序较复杂
Java 的 IO 结构,FilterInputStream 就是一个装饰者