美文网首页
设计模式(四)装饰者模式

设计模式(四)装饰者模式

作者: 天色将变 | 来源:发表于2019-06-23 20:18 被阅读0次
定义

装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供类比继承更有弹性的替代方案。

解决的问题

在不修改底层代码的情况下,给对象赋予新的职责。

使用到的原则
  • 开放关闭原则:类应该对扩展开放,对修改关闭。
类图
image.png
描述
  • 装饰者和被装饰对象有相同的超类型,ADecorator是个装饰者抽象类,ClassA是被装饰者,ClassBCD是已实现的核型功能。ADecorator及其子类都是CLassA的子类。
  • 你可以用一个或多个装饰者包装一个对象。
  • 既然装饰者和被装饰者有相同的超类型,所以在任何需要原始对象的场合,可以用装饰过的对象替代它
  • 装饰者可以在所委托被"装饰者的行为"之前或之后,加上自己的行为,以达到特定的目的。
  • 对象可以在任何时候被装饰,所以可以在运行时动态地、不限量地用你喜欢的装饰者来装饰对象。
伪代码

被装饰者

public abstract class ClassA{
  String attr = "default str";
  public String get Attr(){
    return attr;
  }
  public abstract int getValue();
}
public class ClassB extends ClassA{
  public ClassB(){
    attr = "classb";
  }
  public int getValue(){
    return 1;
  }
}
public class ClassC extends ClassA{
  public ClassC(){
    attr = "classc";
  }
  public int getValue(){
    return 2;
  }
}

装饰者

public abstract class ADecorator{
  public abstract String getAttr();
}
public class ClassE extends ADecorator{
  ClassA classa;
  public ClassE(ClassA a){
    this.classa = a;
  }
  public String getAttr(){
    return a.getAttr()+"classe";// 被装饰者的行为+自己的行为
  }
  public int getValue(){
    return a.getValue()+4;// 被装饰者的行为+自己的行为
  }
}
public class ClassD extends ADecorator{
  ClassA classa; // 这里是关键,增加类被装饰者的引用
  public ClassD(ClassA a){
    this.classa = a;
  }
  public String getAttr(){
    return a.getAttr()+"classd";// 被装饰者的行为+自己的行为
  }
  public int getValue(){
    return a.getValue()+5;// 被装饰者的行为+自己的行为
  }
}

示例

ClassA ca = new ClassB();
System.out.println(ca.getAttr()+ca.getValue());

//对ca对象附加功能
ClassA ca1 = new ClassB();// 面向接口编程,依然使用原来的功能
ca1 = new ClassE(ca1);// 在**ca1对象**的基础上**附加类ClassE**的功能
ca1 = new ClassD(ca1);// 又增加类ClassD的功能
System.out.println(ca1.getAttr()+ca1.getValue());
一句话总结

继承它,使用它,扩展它

相关文章

  • 设计模式

    设计模式 单例模式、装饰者模式、

  • 设计模式学习专栏四--------装饰者模式

    设计模式学习专栏四--------装饰者模式 场景 设计星巴兹咖啡, 主体(DarkRoast等) + 配料 (...

  • 设计模式笔记汇总

    目录 设计原则 “依赖倒置”原则 未完待续... 设计模式 设计模式——策略模式 设计模式——装饰者模式 设计模式...

  • java IO 的知识总结

    装饰者模式 因为java的IO是基于装饰者模式设计的,所以要了解掌握IO 必须要先清楚什么事装饰者模式(装饰者模式...

  • 设计模式(四)装饰者模式

    定义 装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供类比继承更有弹性的替代方案。 解决的问题 在不修...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • JavaScript 设计模式核⼼原理与应⽤实践 之 结构型设计

    JavaScript 设计模式核⼼原理与应⽤实践 之 结构型设计模式 装饰器模式,又名装饰者模式。它的定义是“在不...

  • 8种设计模式:

    主要介绍 单例设计模式,代理设计模式,观察者设计模式,模板模式(Template), 适配器模式,装饰模式(Dec...

  • 装饰者模式

    JavaScript 设计模式 张容铭第十二章 房子装修--装饰者模式 (102页) 装饰者模式(Decorato...

  • Summary of February 2017

    READING Head First 设计模式:完成50%。内容:观察者模式、装饰者模式、工厂模式、单件模式、命令...

网友评论

      本文标题:设计模式(四)装饰者模式

      本文链接:https://www.haomeiwen.com/subject/cifwqctx.html