1、基本概念
官方术语:装饰模式就是给一个对象动态增加一些功能,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。
大白话:说白了就是给一个对象新加一些功能,但不能在对象本书里做修改,就是不能违背开闭原则。
优点:可以实现一个类的功能扩展,动态的增加,动态撤销。
缺点:产生过多相似对象,不好排错。
2、代码实现
「接口」装饰类和被装饰类要实现的接口
public interface Sourceable{
void method();
}
「实现类」需要被装饰的类
public class Source implements Sourceable{
@Override
public void method(){
System.out.println("兰博基尼");
}
}
「实现类」装饰类,负责装饰需要被装饰的类
public class Decorator implements Sourceable{
private Sourceable source;
public Decorator(Sourceable source) {
this.source = source;
}
@Override
public void method() {
source.method(); // 保持原有功能不变
System.out.println("玛莎拉蒂");
}
}
「测试类」
public class SourceableTest{
public static void main(String[] args){
Sourcebale sourceable = new Source();
Sourcebale sourceable1 = new Decorator(sourceable);
sourceable1.method();
}
}
「输出结果」 输出了兰博基尼,在不改变原有代码的基础上新增了玛莎拉蒂