码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式-装饰模式

时间:2016-11-07 01:26:13      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:例子   pen   show   span   设计模式   argc   code   技术   alt   

技术分享

 

   

一个例子,假设说你有一个一个的列车车厢,每一个车厢都有对运输功能作一些不同的增强,然后你选取一些这样的车厢,连接起来,形成一个专列,这个专列的功能就是组成它的那些车厢的功能的叠加。这些都是生活中比较典型的装饰模式

 

层层包装,增强功能。这就是装饰模式的要旨

对扩展开放,对修改关闭

 

动态的给一个对象添加额外的职责(不重要的职责)

想要扩展功能,装饰者提供有别于继承的另一种选择

 

实质:

把要添加的附加功能分别放在单独的类中,并让

这个类包含它要装饰的对象,当需要执行时,客户端就可以有选择地、按顺序地使用装饰功

能包装对象。

 

装饰者和被装饰者对象有相同的超类

 

#include <iostream>
#include <string>
using namespace std;
//
class Person{
private:
  string m_strName;
public:
  Person(){}
  Person(string strName){
    m_strName = strName;
  }
  virtual void show(){
    cout <<"name is :"<<m_strName<<endl;
  }
};
//装饰类
class Finery : public Person
{
protected:
  Person* m_componment;
public:
  void Decroate(Person* compenment){
    this->m_componment = compenment;
//    m_componment = compenment;
  }
  virtual void show(){
    m_componment->show();
  }
};
//T恤
class Tshirt : public Finery{
public:
  virtual void show(){
    cout <<"T shirt"<<endl;
    m_componment->show();
  }
};
//裤子
class Trouser : public Finery{
public :
  virtual void show(){
    cout << "Trouser"<<endl;
    m_componment->show();
  }
};
int main(int argc, char *argv[])
{
  Person *p = new Person ("Sam");
  Trouser *t = new Trouser();
  Tshirt *ts = new Tshirt();
  t->Decroate(p);
  ts->Decroate(t);
  ts->show();//显示是分别向上一层一层调用前面所有类的,这样以达到目的
  return 0;
}

 

技术分享

设计模式-装饰模式

标签:例子   pen   show   span   设计模式   argc   code   技术   alt   

原文地址:http://www.cnblogs.com/qccwx/p/6036640.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!