创建者模式

来源:互联网 发布:蜂群算法和蚁群算法 编辑:程序博客网 时间:2024/05/19 05:34

     建造者模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示:

《大话设计模式》举了一个很好的例子——建造小人,一共需建造6个部分,头部、身体、左右手、左右脚。与工厂模式不同,建造者模式是在导向者的控制下一步一步构造产品的。建造小人就是在控制下一步步构造出来的。创建者模式可以能更精细的控制构建过程,从而能更精细的控制所得产品的内部结构

 对于客户来说,只需知道导向者就可以了,通过导向者,客户就能构造复杂的对象,而不需要知道具体的构造过程。

代码示例:

// 建造者模式2.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream>using namespace std;class Men{public:void SetBody(int param){m_nBody = param;}void SetEye(int param){m_nEye = param;}void SetFoot(int param){m_nFoot = param;}void show(){printf("body:%d\neye:%d\nfoot:%d\n",m_nBody,m_nEye,m_nFoot);}private:int m_nBody;int m_nEye;int m_nFoot;};class  BaseBuilder{public:virtual void CreateMen() = 0;virtual void BuildBody(int param) = 0;virtual void BuildEye(int param) = 0;virtual void BuildFoot(int param) = 0;virtual Men* GetMen() = 0;};class FatBuilder : public BaseBuilder{public:void CreateMen() {printf("create a fatter!!\n");m_men = new Men();}void BuildBody(int param){m_men->SetBody(param);}void BuildEye(int param){m_men->SetEye(param);}void BuildFoot(int param){m_men->SetFoot(param);}Men* GetMen() {return m_men;}protected:private:Men * m_men;};class ThinBuilder : public BaseBuilder{public:void CreateMen() {printf("create a thiner!!\n");m_men = new Men();}void BuildBody(int param){m_men->SetBody(param);}void BuildEye(int param){m_men->SetEye(param);}void BuildFoot(int param){m_men->SetFoot(param);}Men* GetMen() {return m_men;}protected:private:Men * m_men;};class Director{public:Director(BaseBuilder* base){m_baseBuilder = base;}void BuilderMen(){m_baseBuilder->CreateMen();m_baseBuilder->BuildBody(501);m_baseBuilder->BuildEye(502);m_baseBuilder->BuildFoot(503);}public:BaseBuilder* m_baseBuilder;};int main(int argc, char* argv[]){// Men* men2 = new Men();// men2->SetBody(100);// men2->SetEye(200);// men2->SetFoot(300);// men2->show();Director* director = NULL;BaseBuilder* base =  NULL;Men* men  = NULL;base = new FatBuilder();director = new Director(base);director->BuilderMen();men = base->GetMen();men->show();printf("Hello World!\n");base = new ThinBuilder();director = new Director(base);director->BuilderMen();men = base->GetMen();men->show();printf("Hello World!\n");return 0;}
结果:

create a fatter!!
body:501
eye:502
foot:503
Hello World!
create a thiner!!
body:501
eye:502
foot:503
Hello World!
Press any key to continue

1 0
原创粉丝点击