java装饰设计模式
设计模式:对于设计的模式的学习
1.解决问题
我们有一个Person类。没有错!类中有一个方法
chifan():可以完成吃饭的功能。
现在,我们需要对这个类中功能的扩展或者增强,怎么做呢?
有的的同学可能会想到:“那还不容易!”改代码"
可想而知对于修改自己的代码对于程序猿来说是一个灾难!
class Person {
void chifan() {
System.out.println("吃饭!");
}
}
2.分析问题
解决方案:
1.既然是对功能的扩展可以使用创建新类并继承需要扩展类,并对继承的类中功能的覆盖。
class NewPerson extends Person {
public void chifan() {
System.out.println("开胃酒!");
super.chifan();
System.out.println("甜点!");
}
}
分析优缺点:
优点:可以直接对需要类的功能进行增强或者扩展。
缺点:这种方法的完成需要使用继承才能完成,会使得整个体系过于臃肿。
2.可以使用创建一个新的类,然后使用构造器传入需要扩展类的实例,并建立扩展后的功能。
class NewPerson {
private Person p;
NewPerson(Person p) {
this.p = p;
}
public void chifan() {
System.out.println("开胃酒!" + p.hashCode());
p.chifan();
System.out.println("甜点!");
}
}
分析优缺点:
优点:在结构上会比直接继承扩展类的方式会更加灵活
缺点:利用装饰器模式,常常造成设计中有大量的小类,数量实在太多,可能会造成使用此API程序员的困扰。例如:IO流