装饰设计模式
说明:装饰设计模式,可以在原有技能的基础上,新增技能,降低继承所带来的耦合性
示例:通过模拟Java官方API中的FileWriter与BufferedWriter来模拟装饰设计模式 第一步:定义抽象类public abstract class Writer2 {
public abstract void write();
}
第二步:定义过时的类
public class FileWriter2 extends Writer2 {
@Override
public void write() {
System.out.println("FileWriter 的 writer() 方法 ");
}
}
第三步:测试
public static void main(String[] args) {//psvm
FileWriter2 writer2 = new FileWriter2();
writer2.write();
}
第四步:定义新的针对过时类的功能增强类
public class BufferedWriter2 extends Writer2 {
private Writer2 writer2;
public BufferedFileWriter2(Writer2 writer2) {
this.writer2 = writer2;
}
@Override
public void write() {
System.out.println("新的增强的功能");
writer2.write();
}
}
第五步:测试
public static void main(String[] args) {//psvm
FileWriter2 writer2 = new FileWriter2();
BufferedWriter2 bufferedFileWriter2 = new BufferedWriter2(writer2);
bufferedWriter2.write();
}
装饰设计模式和继承的区别
装饰是构造函数参数传递进行增强 如果为了某个功能而产生子类(继承)那么那个体系是非常臃肿的 装饰模式比继承要灵活。避免了继承体系臃肿。而且降低了类于类之间的关系。 装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。 所以装饰类和被装饰类通常是都属于一个体系中的。
- 优点: –装饰模式降低了类与类之间的耦合度,可以动态地增加或删除功能,装饰类及具体装饰类可以独立地进行变化,以便后期增加或者删除类。 –扩展对象功能,比继承要灵活,不会导致类的个数急剧地增加。
- 缺点: –产生很多的小对象,大量的小对象会占用内存。 –组合方式很多,很容易出错。