大话设计模式-装饰模式(C++)

《大话设计模式》的装饰模式的C++实现。

结构图:

Decorator.h:

#ifndef _DECORATOR_H
#define _DECORATOR_H

#include <iostream>
#include <string>
using namespace std;

//ConcreteComponent类
class CPerson
{
public:
	CPerson(){};
	CPerson(string str):m_sName(str){};
	virtual void Show();
protected:
private:
	string m_sName;
};

class CFinery : public CPerson
{
public:
	//CFinery(CPerson *tmp):m_pComponent(tmp){};
	void Decorate(CPerson *component);
	void Show();
protected:
private:
	CPerson *m_pComponent;
};

//ConcreteDecorator
class CTShirts :public CFinery
{
public:
	//CTShirts(CPerson *tmp):m_pComponent(tmp){};
	void Show();
protected:
private:
};

class CBigTrouser : public CFinery
{
public:
	//CBigTrouser(CPerson *tmp):m_pComponent(tmp){};
	void Show();
protected:
private:
};

#endif

Decorator.cpp:

#include "Decorator.h"

void CPerson::Show()
{
	cout<<"装饰人:"<<m_sName<<endl;
}

void CFinery::Show()
{
	if (m_pComponent != NULL)
	{
		m_pComponent->Show();
	}
}

void CFinery::Decorate( CPerson *component )
{
	m_pComponent = component;
}
void CTShirts::Show()
{
	CFinery::Show();
	cout<<"TShirts"<<endl;
}

void CBigTrouser::Show()
{
	CFinery::Show();
	cout<<"垮裤"<<endl;
}

main.cpp:

#include <iostream>
#include "Decorator.h"
using namespace std;

int main()
{	//装饰模式
	CPerson person("lin");
	CBigTrouser bigtrouser;
	CTShirts Tshirts;
	bigtrouser.Decorate(&person);
	Tshirts.Decorate(&bigtrouser);
	Tshirts.Show();

	return 0;
}

时间: 2024-11-10 11:50:42

大话设计模式-装饰模式(C++)的相关文章

大话设计模式—装饰模式

装饰模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能. 大话设计模式中程杰老师给出的定义,装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活. 装饰模式结构图如下: 关键代码: 1.Component 类充当抽象角色,不应该具体实现. 2.修饰类引用和继承

大话设计模式---装饰模式

装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活. 如果只有一个ConcreteComponent类而没有抽象的Component类,那么Decorator类可以是ConcreteComponent的一个子类.同样道理,如果只有一个ConcreteDecorator类,那么就没有必要建立一个单独的Decorator类,而可以把Decorator和ConcreteDecorator的责任合并成一个类. 总结:当系统需要新功能的时候,是向旧的类中添加新的代码.

大话设计模式--装饰模式 C++简单例子

装饰模式在对象动态增加功能方面优于继承,用装饰模式替代继承,比继承更加灵活. 小菜扮靓第三版 class person { public: virtual void show(){ cout << "汤姆: " ; } }; class decorator :public person { public: person *m_a;//被装饰者 void decorate(person* a){ m_a = a; } //void show(){ // if (m_a !=

【大话设计模式】设计模式系统学习大合集

转载请注明出处:http://blog.csdn.net/column/details/designpatternbylmb.html 为了方便各位网友学习以及方便自己复习之用,将设计模式的系列内容按照由浅入深的学习顺序总结如下,点击相应的标题即可跳转到对应的文章. 大话设计模式-工厂模式 大话设计模式-单例模式 大话设计模式-原型模式 深复制VS浅复制(MemberwiseClone方法介绍) 大话设计模式-代理模式 大话设计模式-中介者模式 大话设计模式-策略模式 大话设计模式-装饰模式 大

大话设计模式_装饰模式(Java代码)

装饰模式:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活. 简单描述:1一个父类A(主要给各具体装饰者可以设置待装饰对象),1个具体待装饰类(继承于父类A),1个抽象装饰者(继承父类A),多个具体装饰者(继承抽象装饰者).装饰者持有父类A的引用,每个装饰者在调用方法时都先调用持有的引用的对应方法,另外可在方法中再添加自己的功能(貌似描述得比较复杂,其实就是一传一,每个中间者都可以添加自身的功能) 大话设计模式中的截图: Component是定义一个对象接口,可以给

大话设计模式C++版——装饰模式

女人常说男人喜新厌旧,只见新人笑,那闻旧人哭,但装饰模式(Decorator)却是一种结交新朋友不忘老朋友的设计模式,非常适合去古代当老公(现代是不行的,因为只能娶一个老婆了).装饰模式的本质是每一个装饰对象都被保留一个被其装饰的对象,装饰对象在展示新功能时会同时去调用被其装饰的对象的同功能函数,通过如此层层包含调用(即装饰),形成一个类似链表的结构,接下来的介绍中,我们还会看到更多的类似链表结构的设计模式,比如职责链模式.状态模式. 仍以<大话设计模式>一书中装饰模式的小菜穿衣的例子为例,来

学习大话设计模式06_装饰模式

装饰模式(Decorator): 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活. 1 /** 2 * Component 是定义一个对象接口,可以给这些对象动态地添加职责 3 * @author Monica 4 * 5 */ 6 public abstract class Component { 7 public abstract void Operation(); 8 } 9 10 11 /** 12 * ConcreteComponent 是定义了一个具体

&lt;三&gt;读《《大话设计模式》》之装饰模式

学习这个模式比前几个要难点了,搞了半天才弄懂.好吧,也许是我脑子慢 装饰者模式:装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. <<大话设计模式>>一书中以"小菜"去约会需要打扮为例子来展开学习装饰模式的,对于该模式,本人的理解是:就是对一个已有的算法进行二次加工,但又不改变原来的代码,在原有的数据处理中再一次进行处理. 好了不多说,通过代码去理解会更好一点,本人代码中的注解很关键

大话设计模式读书笔记--设计模式总结

前言 大话设计模式看了两遍,之前看过一遍,理解的不深刻, 这次用了一个月多点的时间再次温习,利用下班后的时间回来学习,把学习心得记录下来,加深了对面向对象的理解 之前是看到一个需求搞清楚业务流程之后立刻就去做了,很少从设计层面的角度考虑,现在在开发程序时,开始有了设计的思想,也有了达到可维护,可复用,可扩展目的具体的实现方法 每当看到经过优化代码的效果时,就想起一句话:精彩的代码是如何想出来的,比看到精彩的代码更加令人兴奋 下面是用自己的话进行的总结,以便加深记忆和理解 创建型 抽象工厂 定义: