定义:

  动态的给一个对象增加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

  就是以组合的方式动态的为对象添加功能,比起继承,更符合开闭原子。

结构图:

 

 

 代码:

//Component类

class Component

{

public:

//抽象核心职责,装饰器需要在这个职责基础上增加新的职责

  public void operation();

}

//Component实现类

class ConcreteComponent  : Component

{

//核心职责实现

public:

   void operation()

  {

    。。。;

  }

}

//装饰器抽象类,需要有一个成员指向组件对象,并含有组件核心职责接口定义

class Decorator : Component

{

protected: 

//指向组件对象的成员

  ConcreteComponent  cConcreteComponent;

public  :

//构造方法传入组件对象

  Decorator :Decorator (ConcreteComponent  cConcreteComponent)

  {

    this.cConcreteComponent = cConcreteComponent;

  }

//j组件核心职责

  void operation()

  {

   cConcreteComponent .operation();

  }

]

//具体装饰A

class DecoratorA : Decorator

{

public:

//新增功能

  void Addoperation 

  {

    。。。;

  }

//组件核心职责

  void operation()

  {

     Addoperation();//增加新职责

   this.cConcreteComponent .operation();

  }

}

//具体装饰B

class DecoratorB: Decorator

{

public:

//新增功能

  void AddBoperation 

  {

    。。。;

  }

//j组件核心职责

  void operation()

  {

     AddBoperation();//增加新职责

   this.cConcreteComponent .operation();

  }

}

//客户端

Component cConcreteComponent = new ConcreteComponent();

DecoratorA cDecoratorA = new DecoratorA (cConcreteComponent );

DecoratorB cDecoratorB = new DecoratorB (cDecoratorA );

cDecoratorB .operation();

 

使用时机:

  当系统需要新增功能,并且新增功能是为了装饰原有核心职责或者主要行为时,考虑装饰器模式。

 

优点:把类中的装饰功能从类中搬移出去,简化原有的类,并守护开闭原则

缺点:更多的类,使程序更加复杂。

版权声明:本文为haosk原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/haosk/p/13341899.html