第六章 穿什么有这么重要---装饰模式(读书笔记)
2014-05-22 17:16
309 查看
1.装饰模式(Decorator):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。
2.Component是定义一个对象接口,可以给这些对象动态地添加职责。ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责。Decorator:装饰抽象类,继承了Component从外类来扩展Component类的功能,但对于Component来说,是无需知道Decorator的存在的.至于ConcreteDecorator就是具体的装饰对象,起到给Component添加职责的功能。
3.装饰模式是利用SetComponent来对对象进行包装的。这样每个装饰对象的实现就和如何使用这个对象分离开了,每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链当中。
4.装饰模式是为己有功能动态地添加更多功能的一种方式。当系统需要新功能的时候,是向旧的类中添加新的代码。这些新加的代码通常装饰了原有类的核心职责或主要行为。
5.装饰模式可以让你全副武装到牙齿,也可以让你只挂一丝到内裤。
6.装饰模式的优点是:把类中的装饰功能从类中搬移去除,这样可以简化原有的类。最大的好处是有效地把类的核心职责和装饰功能区分开了。而且可以去除相关类中重复的装饰逻辑。
7.保证装饰类之间彼此独立,这样他们就可以以任意的顺序进行组合了。
小菜的第一款装扮
代码:
运行结果:
使用继承和抽象
代码实现:
实验结果:
装饰设计模式的UML
小菜的装饰模式装扮
代码实现:
2.Component是定义一个对象接口,可以给这些对象动态地添加职责。ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责。Decorator:装饰抽象类,继承了Component从外类来扩展Component类的功能,但对于Component来说,是无需知道Decorator的存在的.至于ConcreteDecorator就是具体的装饰对象,起到给Component添加职责的功能。
3.装饰模式是利用SetComponent来对对象进行包装的。这样每个装饰对象的实现就和如何使用这个对象分离开了,每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链当中。
4.装饰模式是为己有功能动态地添加更多功能的一种方式。当系统需要新功能的时候,是向旧的类中添加新的代码。这些新加的代码通常装饰了原有类的核心职责或主要行为。
5.装饰模式可以让你全副武装到牙齿,也可以让你只挂一丝到内裤。
6.装饰模式的优点是:把类中的装饰功能从类中搬移去除,这样可以简化原有的类。最大的好处是有效地把类的核心职责和装饰功能区分开了。而且可以去除相关类中重复的装饰逻辑。
7.保证装饰类之间彼此独立,这样他们就可以以任意的顺序进行组合了。
小菜的第一款装扮
代码:
#pragma once #include <string> #include <iostream> using std::string; using std::cout; using std::endl; class Person { public: Person(string name) { m_Name=name; }; void WearTShirts(void) { cout << "大T恤" << endl; }; void WearBigTrouser(void) { cout << "垮裤" << endl; }; void WearSneakers(void) { cout << "破球鞋" << endl; }; void WearSuit(void) { cout << "西装" << endl; }; void WearTie(void) { cout << "领带" << endl; }; void WearLeatherShoes(void) { cout << "皮鞋" << endl; }; void Show(void) { cout << m_Name << "装扮的"<< endl; }; private: string m_Name; }; void main() { Person* person=new Person("小菜"); person->Show(); person->WearBigTrouser(); person->WearTShirts(); person->WearSneakers(); cout<<endl; person->Show(); person->WearSuit(); person->WearLeatherShoes(); person->WearTie(); }
运行结果:
使用继承和抽象
代码实现:
#pragma once #include <string> #include <iostream> using std::string; using std::cout; using std::endl; class Person { public: Person(string name) { m_Name=name; }; void Show(void) { cout << m_Name << "装扮的"<< endl; }; private: string m_Name; }; //服饰抽象类 class Finery { public: virtual void Show(void) = 0; }; class TShirts :public Finery { public: void Show(void) { cout << "大T恤" << endl; }; }; class BigTrouser :public Finery { public: void Show(void) { cout << "垮裤" << endl; }; }; class Sneakers :public Finery { public: void Show(void) { cout << "破球鞋" << endl; }; }; class Suit :public Finery { public: void Show(void) { cout << "西装" << endl; }; }; class Tie :public Finery { public: void Show(void) { cout << "领带" << endl; }; }; class LeatherShoe :public Finery { public: void Show(void) { cout << "皮鞋" << endl; }; }; void main() { Person* person=new Person("小菜"); Finery* dtx=new TShirts(); Finery* kk = new BigTrouser(); Finery* pqx = new Sneakers(); person->Show(); dtx->Show(); kk->Show(); pqx->Show(); cout<<endl; }
实验结果:
装饰设计模式的UML
小菜的装饰模式装扮
代码实现:
#pragma once #include <string> #include <iostream> using std::string; using std::cout; using std::endl; class Person { public: Person(string name) { m_Name=name; }; void Show(void) { cout << "装扮的"<< m_Name << endl; }; Person(){}; private: string m_Name; }; //服饰类 class Finery : public Person { public: void Decorator(Person* comp) { this->m_pComponent=comp; }; void Show(void) { if (m_pComponent!=NULL) { m_pComponent->Show(); } } protected: Person* m_pComponent; }; class TShirts :public Finery { public: void Show(void) { cout << "大T恤" << endl; Finery::Show(); }; }; class BigTrouser :public Finery { public: void Show(void) { cout << "垮裤" << endl; Finery::Show(); }; }; class Sneakers :public Finery { public: void Show(void) { cout << "破球鞋" << endl; Finery::Show(); }; }; class Suit :public Finery { public: void Show(void) { cout << "西装" << endl; Finery::Show(); }; }; class Tie :public Finery { public: void Show(void) { cout << "领带" << endl; Finery::Show(); }; }; class LeatherShoe :public Finery { public: void Show(void) { cout << "皮鞋" << endl; Finery::Show(); }; }; void main() { Person* person=new Person("小菜"); Sneakers* pqx = new Sneakers(); BigTrouser* kk = new BigTrouser(); TShirts* dtx = new TShirts(); pqx->Decorator(person); kk->Decorator(pqx); dtx->Decorator(kk); dtx->Show(); }
相关文章推荐
- 第六章 穿什么有这么重要-装饰模式(读书笔记)
- 第六章 穿什么有这么重要吗?—装饰模式
- 《大话设计模式》——读后感 (3)穿什么有这么重要?——装饰模式之理论实例(1)
- 穿什么有这么重要吗?————装饰模式
- 《大话设计模式》之--第6章 穿什么有这么重要?----装饰模式
- 第6章 穿什么有这么重要?-装饰模式 大话设计模式
- 《大话设计模式》——读后感 (3)穿什么有这么重要?——装饰模式之理解实例(2)
- 装饰模式-Python版---穿什么有这么重要?
- 【设计模式】穿什么有这么重要? --- 装饰模式
- 《大话设计模式》——读后感 (6)穿什么有这么重要?——装饰模式
- 【设计模式】穿什么有这么重要? --- 装饰模式
- 《大话设计模式》--穿什么有这么重要?--装饰模式<Decorator>(6)
- 《大话设计模式》之--第6章 穿什么有这么重要?----装饰模式
- 大话设计模式-第06章 穿什么有这么重要?--装饰模式
- 《大话设计模式》读书笔记(C++代码实现) 第六章:装饰模式
- 《大话设计模式》读书笔记(C++代码实现) 第六章:装饰模式
- 什么是Unix以及它为什么这么重要?
- 《大话设计模式》读书笔记:装饰模式与均值计算实例
- 什么是 Unix 以及它为什么这么重要