設計模式之裝扮模式(C++實現)

 裝飾模式:動態地給一個對象添加一些額外的職責。就增加功能來說,裝飾模式相比生成子類更爲靈活。有時我們希望給某個對象而不是整個類添加一些功能。比如有一個手機,允許你爲手機添加特性,比如增加掛件、屏幕貼膜等。一種靈活的設計方式是,將手機嵌入到另一對象中,由這個對象完成特性的添加,我們稱這個嵌入的對象爲裝飾。這個裝飾與它所裝飾的組件接口一致,因此它對使用該組件的客戶透明。

***********************************************main.cpp**************************************************
#include "Person.h"
#include "costume.h"
#include "BigTrouser.h"
#include "Tshirt.h"
#include "Decorate.h"
#include <string>
int main()
{
	string name ="DPT";
	Person *person = new Decorate(name);
	Person *a = new Tshirt(person);
	Person *b = new BigTrouser(a);
	b->ShowDecorate();//輸出DPT的裝扮:Tshirt BigTrouser
	getchar();
	return 0;
}

/***********************************************Person.h**************************************************/
//抽象基類
#include <iostream>
using namespace std;
#pragma once;
class Person
{
public:
	Person(){};
	virtual void ShowDecorate() = 0;
};


/***********************************************Decorate.h**************************************************/
//真正要裝飾的類
#include "Person.h"
#include <string>
class Decorate: public Person
{
public:
string m_name;
public:
Decorate(string name)
{
		</span>m_name = name;
}
void ShowDecorate()
{
cout<<m_name<<"的裝飾:";
}
};

/***********************************************Costume.h**************************************************/
#include "Person.h"
#pragma once;
class Costume:public Person
{
	Person *m_person;
public:
	Costume(){}
	Costume(Person *person)
	{
		m_person = person;
	}
	void ShowDecorate()
	{
		m_person->ShowDecorate();
	}
};

/***********************************************BigTrouser.h**************************************************/
#include "costume.h"

class BigTrouser:public Costume
{
	Person * m_person;
public:
	BigTrouser(Person * person)
	{
		m_person = person;
	}
	void ShowDecorate()
	{
		m_person->ShowDecorate();
		AddDecorate();
	}
	void AddDecorate()
	{
		cout<<"BigTrouser ";
	}
};

/***********************************************Tshirt.h**************************************************/
#include "costume.h"

class Tshirt:public Costume
{
	Person * m_person;
public:
	Tshirt(Person *person)
	{
		m_person = person;
	}
	void ShowDecorate()
	{
		m_person->ShowDecorate();
		AddDecorate();
	}
	void AddDecorate()
	{
		cout<<"T-shirt ";
	}
};



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章