一、背景
想象一下,如果现在我们要对已有的一个类扩展功能,我们会怎么做?我想第一个闪现到我们的脑袋里面的便是继承了吧,但是试想一下,如果不断地想扩展功能,继承是不是会带来好多子类,子类与父类存在耦合。如果父类改变,比如构造函数参数变化,还得到每个子类去修改。
二、概念
所谓装饰者模式,顾名思义,就是包装。想小时候玩的礼物盒游戏,一层一层的包裹礼物,被包裹 的 便是我们的被装饰者,包裹的外层便是我们的装饰者。装饰者模式就是给一个对象动态的增加功能,要求装饰者与被装饰者实现同一接口,装饰者持有被装饰者的实例。同样,装饰者也可以被装饰,成为被装饰者,达到层层装饰的效果。java IO就是通过装饰者模式实现的。
三、代码实例
public class DecoratorPatternDemo {
public static void main(String agrs[]) {
AbstractClass sourse = new Sourse();
AbstractClass decoretor = new Decorator(sourse);
decoretor.method1();
AbstractClass decoretor1 = new Decorator(decoretor);
decoretor1.method1();
}
}
interface AbstractClass {// 抽象接口
public void method1();
}
class Sourse implements AbstractClass {// 被装饰者
public Sourse() {
System.out.println("我是被装饰者");
}
public void method1() {
System.out.println("---method1---");
}
}
class Decorator implements AbstractClass {// 装饰者
private AbstractClass sourse;
public Decorator(AbstractClass sourse) {
this.sourse = sourse;
System.out.println("我是装饰者(也可被装饰)");
}
@Override
public void method1() {
// TODO Auto-generated method stub
System.out.println("装饰执行前");
sourse.method1();
System.out.println("装饰执行后");
}
}