设计模式学习--装饰模式
2017-03-07 23:08
246 查看
看完了几个原则后,我又开始看装饰模式,将一些装饰用的方法从主类中分离,并且将具体的装饰步骤隔离开了,使得主类更加的简便。
这样做的最大好处就是,有效的把类的核心职责和装饰功能区分开了,而且可以去除相关类中重复的装饰逻辑。
这样做的最大好处就是,有效的把类的核心职责和装饰功能区分开了,而且可以去除相关类中重复的装饰逻辑。
#include <iostream> #include <string> using namespace std; class People //主类 { string m_name; public: People(){}; People(string name):m_name(name){}; virtual void show() //输出人名的虚函数 { cout<<"装扮的"<<m_name<<endl; } }; class Clothes : public People //装饰类 { People* m_peo; public: void decorate(People* peo) //传入对象指针 { m_peo = peo; } void show() { if(m_peo != NULL) //当传入的对象指针不为空时 调用m_peo的show函数 { m_peo->show(); } } }; class Tshirts : public Clothes //具体的装饰类 T恤 { public: void show() { cout<<"大T恤 "; //输出大T恤 Clothes::show(); //调用基类的show函数 输出人名 用域解析符 防止造成命名冲突 } }; class Shoes : public Clothes //具体的装饰类 鞋子 { public: void show() { cout<<"跑鞋 "; //输出跑鞋 Clothes::show(); //调用基类的show函数 输出人名 } }; class Jeans : public Clothes //具体的装饰类 牛仔裤 { public: void show() { cout<<"牛仔裤 "; //输出牛仔裤 Clothes::show(); //调用基类的show函数 输出人名 } }; class BriefS : public Clothes //具体的装饰类 内裤 { public: void show() { cout<<"内裤 "; //输出内裤 Clothes::show(); //调用基类的show函数 输出人名 } }; class Overcoat : public Clothes //具体的装饰类 大衣 { public: void show() { cout<<"大衣 "; //输出大衣 Clothes::show(); //调用基类的show函数 输出人名 } }; int main() { People *P = new People("小明"); //定义人类实例 并将名字传入构造函数 cout<<"\n第一种装扮:\n"; Tshirts *T = new Tshirts; //定义T恤实例 Shoes *S = new Shoes; //定义鞋子实例 Jeans *J = new Jeans; //定义牛仔裤实例 T->decorate(P); //T调用基类Clothes的decorate函数 S->decorate(T); //S调用基类Clothes的decorate函数 J->decorate(S); //J调用基类Clothes的decorate函数 J->show(); //此时基类Clothes中的m_peo为S(强制转化为People),不为空,调用基类的show cout<<"\n第二种装扮:\n"; Overcoat *O = new Overcoat; BriefS *B = new BriefS; Shoes *S0 = new Shoes; S0->decorate(P); B->decorate(S0); O->decorate(B); O->show(); return 0; }
相关文章推荐
- Java设计模式学习09——装饰模式
- 设计模式学习之装饰模式:IO流的装饰器
- 软件工程 - 设计模式学习之装饰模式Decorator
- 设计模式学习笔记——装饰模式
- Java设计模式学习09——装饰模式
- 设计模式学习笔记--装饰模式
- java学习之IO装饰设计模式
- 设计模式学习笔记--装饰(Decorator)模式
- 设计模式学习之装饰模式
- 设计模式 学习笔记 之 装饰模式 Decorator(6)
- 六 装饰模式(Decorator)——设计模式学习笔记
- 设计模式学习-装饰器模式
- 设计模式学习-装饰模式
- 设计模式学习之装饰模式
- 设计模式学习(一)---装饰着模式(Decorator)
- 学习设计模式————装饰模式
- 设计模式学习之装饰模式和代理模式
- 设计模式学习-Decorator(装饰)
- 设计模式学习总结-装饰模式(Decorator Method)
- 【HeadFirst 设计模式学习笔记】3 装饰模式