<<设计模式之禅(第二版)>>——第十七章 装饰模式

定义:
  • 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式相比生成子类更为灵活。
装饰模式通用类图
/*
 * 定义抽象的构件
 * */
public abstract class Component {
  public abstract void operate();
}
public class ConcreteCompnent extends Component {

  @Override
  public void operate() {
    // TODO Auto-generated method stub

  }

}

/*
 * 定义抽象的修饰类,通过构造参数传入具体的组件
 * */
public abstract class Decorator extends Component {
  private Component component;

  public Decorator(Component component) {
    // TODO Auto-generated constructor stub
    this.component = component;
  }

  @Override
  public void operate() {
    // TODO Auto-generated method stub
    this.component.operate();
  }

}
public class ConcreteDecorator extends Decorator {

  public ConcreteDecorator(Component component) {
    super(component);
    // TODO Auto-generated constructor stub
  }

  // 定义自己的私有修饰方法
  private void privateMethod() {

  }

  @Override
  public void operate() {
    // TODO Auto-generated method stub
    this.privateMethod();
    super.operate();

  }
}
public class Client {
  public static void main(String[] args) {
    Component component = new ConcreteCompnent();
    Decorator decorator = new ConcreteDecorator(component);
    decorator.operate();
  }
}
优点:
  • 装饰类和被装饰类可以独立发展,而不会耦合,换句话说,Component无须知道Decorator类,Decorator是从外部拓展Component类的功能,Decorator也不用知道具体的组件
  • 可以作为继承关系的一种替代方案
  • 可以动态的拓展实现类的功能
缺点:
  • 多层的装饰会使得系统变得复杂
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 场景问题# 1.1 复杂的奖金计算## 考虑这样一个实际应用:就是如何实现灵活的奖金计算。 奖金计算是相对复杂...
    七寸知架构阅读 4,064评论 4 67
  • 0x01 前言   装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变...
    菩提树下成魔阅读 426评论 0 0
  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 3,993评论 1 15
  • 设计模式基本原则 开放-封闭原则(OCP),是说软件实体(类、模块、函数等等)应该可以拓展,但是不可修改。开-闭原...
    西山薄凉阅读 3,898评论 3 14
  • 1 概述 在一个项目中,你会有非常多的因素考虑不到,特别是业务的变更,不时的冒出一个需求是很正常的情况。有三个继承...
    今晚打肉山阅读 314评论 0 0