- 当对一组对象的功能进行增强时, 就可以使用该模式进行问题的解决
- 例如 BufferedWriter, BufferedReader
public class PersonDemo{
public static void main(String[] args){
Person p = new Person();
// p.chifan();
// 对 Person 类进行增强, 装饰设计模式
NewPerson p1 = new NewPerson(p);
p1.chifan();
}
}
class Person{
public void chifan(){
System.out.println("吃饭");
}
}
// 随着社会的发展, Person 类升级
// 这个类的出现是为了增强 Person 而出现的,
// 因此构造函数需要带参数为 Person
class NewPerson{
private Person p;
public NewPerson(Person p){
this.p = p;
}
public void chifan(){
System.out.println("开胃酒");
p.chifan();
System.out.println("甜点");
}
}
// 使用继承
class NewPerson2 extends Person{
public void chifan(){
System.out.println("开胃酒");
super.chifan();
System.out.println("甜点");
}
}
装饰和继承的异同点
- 装饰和继承都可以对程序功能进行扩展
- 装饰比继承灵活
特点: 装饰类和被装饰类都必须所属于同一个接口或父类.
参考资料: