装饰者模式

装饰者模式

  1. 定义
    Attach additional responsibilities to an object dynamically keeping the same interface. Decorators provide a flexible alternative to subclass for extending functionality.
    通过保持相同的接口动态地给对象添加一些职责。装饰者模式提供了一种相比生成子类更为灵活的增加功能的方法;
  2. 分析
    装饰者模式的核心是保持相同的接口、动态增加功能;在我看来,装饰者模式是一个组装“新对象”的模式:我有一杯牛奶和一杯咖啡,我使用牛奶“装饰”一下咖啡,便得到一种新的饮料:咖啡牛奶!如果牛奶和咖啡都继承饮料这一父类,那么新的饮料并不是通过产生一个新的子类而获得的,而是通过组合已有子类获得。这样的好处便是动态扩展子类种类(可不就是动态给对象添加一些职责?),其弹性自然比通过创建新子类以获得新职责要好一些;而且由于装饰者和被装饰者继承自同一个父类,所以装饰者可以继续被装饰者装饰,如此便可以获得一杯橘子味的香芋奶茶咖啡了(只要敢想,就有可能,哈哈哈);
    但是装饰者模式也有它的不好处:多层装饰比较复杂;调试起来也不方便,所以适当装饰即可,过度装饰有害;
  3. 实现
    装饰者模式
  4. 体现的面向对象设计原则
    1. 里氏替换原则:被装饰者和装饰者继承自同一父类,角色可以相互替换;
    2. 开闭原则:通过子类的组装实现动态扩展子类,避免产生过多子类;