Fork me on GitHub

装饰设计模式

  • 当对一组对象的功能进行增强时, 就可以使用该模式进行问题的解决
  • 例如 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("甜点");
    }
}

装饰和继承的异同点

  1. 装饰和继承都可以对程序功能进行扩展
  2. 装饰比继承灵活

特点: 装饰类和被装饰类都必须所属于同一个接口或父类.

参考资料:

posted @ 2017-09-11 10:30  小a的软件思考  阅读(176)  评论(0编辑  收藏  举报