装饰器模式
基本概念
装饰,就是装饰,在Java中,装饰器模式就是对一个对象动态的增加一些新的功能(出门了还可以动态的补下妆呢,是吧),但是有个要求,就是:无论是装饰对象还是被装饰的对象都必须实现同一个接口,装饰器持有被装饰对象的实例。
类图中
Sourceable : 接口
Source : 被装饰类
Decorator : 装饰类
代码如下:
Sourceable : 接口
public interface Sourceable {
// 自定义抽象方法
void method();
}
Source : 被装饰类
public class Source implements Sourceable {
@Override
public void method() {
System.out.println("素颜竟可以如此之美!!!");
}
}
这里我们做下测试
public class SourceTest {
public static void main(String[] args) {
Sourceable sourceable = new Source();
sourceable.method();
}
}
打印结果:
然后创建我们的装饰类
Decorator : 装饰类
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 SourceTest {
public static void main(String[] args) {
Sourceable sourceable = new Source();
sourceable.method();
System.out.println("-------------------------------------");
Sourceable sourceable1 = new Decorator(sourceable);
sourceable1.method();
}
}
打印结果:
由以上代码及分析可以知道,装饰器模式的意义在:
1、它可以实现一个类功能的扩展,并且遵守了开闭原则。
2、可以动态的增加功能,而且还能动态的撤销(继承不可以)。
当然世上没有完美的人,装饰器模式也有缺点,它的缺点在,会产生过多相似的对象,不容易排错,就像是一对双胞胎,而你的对象是其中一个。。。。。。噗~~
OK 今天的装饰器模式到此为止了~ 加油!!!冲!!!
本文章只是个人学习,内容不多,也都很基础,如果内容上有什么问题,还请大家多多指教!!
一定会有那么一天,我也能用上这句话:“本性闲散,最终却也跟上了前辈的步伐”