11.建造者模式
1建造者模式的核心內容是:
A:不同的要建造的產品。
B:有一個設計師Director類來直到進行建造。
2建造者模式的作用:將產品的內部表象和產品的生成過程分割開來。
3建造者模式具體描述
//建造模式:將產品的內部表象和產品的生成過程分割開來,
//從而使一個建造過程生成具有不同的內部表象的產品對象。
//建造模式使得產品內部表象可以獨立的變化,
//客戶不必知道產品內部組成的細節。
//建造模式可以強制實行一種分步驟進行的建造過程。
?
//MM最愛聽的就是“我愛你”這句話了,見到不同地方的MM,
//要能夠用她們的方言跟她說這句話哦,我有一個多種語言翻譯機,
//上面每種語言都有一個按鍵,見到MM我只要按對應的鍵,
//它就能夠用相應的語言說出“我愛你”這句話了,
//國外的MM也可以輕松搞掂,這就是我的“我愛你”builder。(
//這一定比美軍在伊拉克用的翻譯機好賣)
4.觀察者模式類圖
5.代碼:
#include<string>
#include <iostream>
#include <vector>
using namespace std;
//建造模式:將產品的內部表象和產品的生成過程分割開來,
//從而使一個建造過程生成具有不同的內部表象的產品對象。
//建造模式使得產品內部表象可以獨立的變化,
//客戶不必知道產品內部組成的細節。
//建造模式可以強制實行一種分步驟進行的建造過程。
?
//MM最愛聽的就是“我愛你”這句話了,見到不同地方的MM,
//要能夠用她們的方言跟她說這句話哦,我有一個多種語言翻譯機,
//上面每種語言都有一個按鍵,見到MM我只要按對應的鍵,
//它就能夠用相應的語言說出“我愛你”這句話了,
//國外的MM也可以輕松搞掂,這就是我的“我愛你”builder。(
//這一定比美軍在伊拉克用的翻譯機好賣)
?
//抽象類,預留接口
class Person? //抽象類,預留ule接口
{
public:
??? virtual void createHead() = 0;
??? virtual void createHand() = 0;
??? virtual void createBody() = 0;
??? virtual void createFoot() = 0;
};
?
class ThinPerson :public Person? ///實現抽象類瘦子,
{
??? void createHead()
??? {
??????? cout << "thinhead"<< endl;
??? }
??? void createHand()
??? {
??????? cout << "thinhand"<< endl;
??? }
??? void createBody()
??? {
??????? cout << "thinbody"<< endl;
??? }
??? void createFoot()
??? {
??????? cout << "thinfoot"<< endl;
??? }
};
?
//胖子類
class FatPerson :public Person
{
??? void createHead()
??? {
??????? cout << "fat head" << endl;
??? }
??? void createHand()
??? {
??????? cout << "fat hand" << endl;
??? }
??? void createBody()
??? {
??????? cout << "fat body" << endl;
??? }
??? void createFoot()
??? {
??????? cout << "fat foot" << endl;
??? }
};
?
class Director
{
private:
??? Person *p;//基類的指針
public:
??? Director(Person *temp) //傳遞對象
??? {
??????? p = temp;//虛函數實現多態
??? }
??? void create()
??? {
??????? p->createHead();
??????? p->createHand();
??????? p->createBody();
??????? p->createFoot();
??? }
};
?
int main()
{
??? Person *p = new FatPerson();
??? Director *d = new Director(p);
??? d->create();
??? delete d;
??? delete p;
?
??? cin.get();
??? return 0;
}
運行結果如下:
總結