设计模式——装饰器模式(C++实现)

  1 #include <iostream>
  2 #include <string>
  3
  4 using namespace std;
  5
  6 class Component
  7 {
  8 public:
  9         virtual void operation() = 0;
 10 };
 11
 12 class ConcreteComponentA: public Component
 13 {
 14 public:
 15         virtual void operation()
 16         {
 17                 cout<< "ConcreteComponentA....."<< endl;
 18         }
 19 };
 20
 21 class ConcreteComponentB: public Component
 22 {
 23 public:
 24         virtual void operation()
 25         {
 26                 cout<< "ConcreteComponentB....."<< endl;
 27         }
 28 };
 29
 30 class Decorator:public Component
 31 {
 32 public:
 33         Decorator(Component* pCom):component(pCom){}
 34
 35         virtual void operation() = 0;
 36
 37         Component* component;
 38 };
 39
 40 class ConcreteDecoratorA: public Decorator
 41 {
 42 public:
 43         ConcreteDecoratorA(Component* pCom):Decorator(pCom){}
 44
 45         void operation()
 46         {
 47                 component->operation();
 48                 AddBehavior();
 49         }
 50
 51         void AddBehavior()
 52         {
 53                 cout<< "ConcreteDecoratorA....."<< endl;
 54         }
 55 };
 56
 57 class ConcreteDecoratorB: public Decorator
 58 {
 59 public:
 60         ConcreteDecoratorB(Component* pCom):Decorator(pCom){}
 61
 62         void operation()
 63         {
 64                 component->operation();
 65                 AddBehavior();
 66         }
 67
 68         void AddBehavior()
 69         {
 70                 cout<< "ConcreteDecoratorB....."<< endl;
 71         }
 72 };
 73
 74 int main(int argc, char* argv[])
 75 {
 76         ConcreteComponentB* ccB = new ConcreteComponentB();
 77
 78         ConcreteDecoratorA* cdA1 = new ConcreteDecoratorA(ccB);
 79
 80         ConcreteDecoratorA* cdA2 = new ConcreteDecoratorA(cdA1);
 81
 82         ConcreteDecoratorB* cdB1 = new ConcreteDecoratorB(cdA1);
 83
 84         cdA1->operation();cout<< endl;
 85         cdA2->operation();cout<< endl;
 86         cdB1->operation();cout<< endl;
 87
 88         return 0;
 89 }
 90
 91 ///////////////////////////
 92 [root]$ ./decorator
 93 ConcreteComponentB.....
 94 ConcreteDecoratorA.....
 95
 96 ConcreteComponentB.....
 97 ConcreteDecoratorA.....
 98 ConcreteDecoratorA.....
 99
100 ConcreteComponentB.....
101 ConcreteDecoratorA.....
102 ConcreteDecoratorB.....
时间: 2024-12-28 06:11:26

设计模式——装饰器模式(C++实现)的相关文章

说说设计模式~装饰器模式(Decorator)

装饰器模式,也叫又叫装饰者模式,顾名思义,将一个对象进行包裹,包装,让它变成一个比较满意的对象,这种模式在我们平时项目开发中,经常会用到,事实上,它是处理问题的一种技巧,也很好的扩展了程序,让程序代码不那么死板! 何时能用到它? 1. 需要扩展一个类的功能,或给一个类添加附加职责. 2. 需要动态的给一个对象添加功能,这些功能可以再动态的撤销. 3. 需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变的不现实. 4. 当不能采用生成子类的方法进行扩充时. 其中我们认为第四种

PHP设计模式-装饰器模式

1.概念: 装饰器模式又叫做装饰者模式,是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.传统的编程模式都是子类继承父类实现方法的重载,使用装饰器模式,只需添加一个新的装饰器对象,更加灵活,避免类数目和层次过多. 2.角色: Component(被装饰对象基类):定义一个对象接口,以规范准备接受附加责任的对象. ConcreteComponent(具体被装饰对象):具体组件角色,即将要被装饰增加功能的类. Decorator(装饰者基类):装饰器接口. ConcreteDecor

设计模式-装饰器模式

前言 点击查看:设计模式系列 装饰器模式(Decorator) 定义:不通过派生类增改类属性动作,而是通过模式设计动态的达到这种效果,而且比继承更方便灵活减少程序的复杂性. 举例: 汪峰打造冠军团队. 首先团队类为空,经过汪峰不断的努力,为团队争取学员,也为团队队员打造合适的平台,让其发挥. 团队不断的变强,变完整,是由装饰者,根据不同的需求,给基类进行增改,一致最后赢得你的赞同,满足你的需求. 实现装配器模式的类图: 战队组建代码 //汪峰战队 abstract class WangFengT

设计模式—装饰器模式

装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能. 意图:动态地给一个对象添加一些额外的职责.就增加功能来说,装饰器模式相比生成子类更为灵活. 主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀. 何时使用:在不想增加

设计模式 —— 装饰器模式(Decorator Pattern)

装饰器模式(Decorator Pattern) 概念 装饰器模式 允许向一个现有的对象添加新的功能,同时又不改变其结构.装饰者可以在所委托被装饰者的行为之前或之后加上自己的行为,以达到特定的目的. 组成 装饰器模式由组件和装饰者组成. 抽象组件(Component):需要装饰的抽象对象. 具体组件(ConcreteComponent):是我们需要装饰的对象 抽象装饰类(Decorator):内含指向抽象组件的引用及装饰者共有的方法. 具体装饰类(ConcreteDecorator):被装饰的对

.net设计模式-装饰器模式

结构型设计模式:关注类与类之间的关系 装饰器模式:用组合+继承的方式对类作出扩展,可以动态为类型添加功能,甚至调整功能顺序,不修改业务类: 一个抽象类 1 public abstract class AbstractStudent 2 { 3 public int Id { get; set; } 4 public string Name { get; set; } 5 6 public abstract void Study(); 7 } 组合+继承该抽象类 1 public class Ba

设计模式——装饰器模式

装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 装饰器模式结构图 Component(抽象构件):它是装饰类和具体构件的公共父类(一般是接口或者抽象类): ConcreteComponent(具体构件):具它是抽象构件对象的子类,用来定义具体的构件对象(Component的子类或者具体实现): Decorator(抽象装饰类):进继承抽象构件,用于给具体的构件添加一些新的职责(一

设计模式-装饰器模式(Decrator Model)

文 / vincentzh 原文连接:http://www.cnblogs.com/vincentzh/p/6057666.html 目录 1.概述 2.目的 3.结构组成 4.实现 5.总结 1.概述 装饰器模式在不改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.通常给一个对象添加功能,要么在类中直接进行修改,要么通过子类继承来扩展对象的功能,又或者使用装饰模式将相应的功能进行任意的组合,使功能的扩展变的具有灵活性和动态性.装饰模式是通过创建一个包装对象,也就是装饰来包裹真实的对象,

PHP设计模式——装饰器模式

<?php /** * 装饰器模式 * 如果已有对象的部分内容或功能发生变化,但是不需要修改原始对象的结构,应使用装饰器模式 * * 为了在不修改对象结构的前提下对现有对象的内容或功能稍加修改,应使用装饰器模式 */ class Base{ protected $_content; public function __construct($content) { $this->_content = $content; } public function edit() { return $this

java设计模式----装饰器模式

Decorator装饰器,顾名思义,就是动态地给一个对象添加一些额外的职责,就好比为房子进行装修一样.因此,装饰器模式具有如下的特征: 它必须具有一个装饰的对象. 它必须拥有与被装饰对象相同的接口. 它可以给被装饰对象添加额外的功能. 用一句话总结就是:保持接口,增强性能. 装饰器通过包装一个装饰对象来扩展其功能,而又不改变其接口,这实际上是基于对象的适配器模式的一种变种.它与对象的适配器模式的异同点如下. 相同点:都拥有一个目标对象. 不同点:适配器模式需要实现另外一个接口,而装饰器模式必须实