首页 > 其他 > 详细

建造者模式

时间:2014-04-02 07:54:21      阅读:407      评论:0      收藏:0      [点我收藏+]

建造者模式就是将一个复杂对象的构造与它的表示分离,对于相同的建造过程,不同的建造者会得到不同的建造结果。

建造者的建造过程各个部分都是单独完成的。



bubuko.com,布布扣


建造者定义建造的步骤和接口。


具体建造者实现建造的步骤和接口,并完成产品的建造。


指导者决定使用哪一个建造者来建造,完成自己所需的产品。



建造者基类接口


#ifndef CBuildBaseH
#define CBuildBaseH
#include<iostream>
#include"CProduct.h"
using namespace std;
class CBuildBase
{
public:
        virtual ~CBuildBase(){};
        virtual void BuildDrink()=0;
        virtual void BuildFood()=0;
        virtual void BuildCocalate()=0;
        virtual CProduct GetProduct()=0;
protected:
        CBuildBase(){};
        CProduct m_CProduct;
};
#endif



具体建造者A

#include"CBuildBase.h"
class CConcreateA:public CBuildBase
{
public:
        CConcreateA(){};
        ~CConcreateA(){};
        void BuildDrink(){m_CProduct.m_sDrink = "可口可乐";}
        void BuildFood(){m_CProduct.m_sFood = "汉堡";}
        void BuildCocalate(){m_CProduct.m_sCocalate = "法式巧克力";}
        CProduct GetProduct(){return m_CProduct;};
private:
};



具体建造者B


#include"CBuildBase.h"
class CConcreateB:public CBuildBase
{
public:
        CConcreateB(){};
        ~CConcreateB(){};
        void BuildDrink(){m_CProduct.m_sDrink = "橙汁";}
        void BuildFood(){m_CProduct.m_sFood = "炒米饭";}
        void BuildCocalate(){m_CProduct.m_sCocalate = "意大利风味巧克力";}
        CProduct GetProduct(){return m_CProduct;};
private:
};



指导者

#include"CBuildBase.h"
class CDirecter
{
public:
    CDirecter(){};
    ~CDirecter(){};
    CProduct Construct(CBuildBase *pCBuildBase)
    {
         pCBuildBase->BuildDrink();
         pCBuildBase->BuildFood();
         pCBuildBase->BuildCocalate();
         return pCBuildBase->GetProduct();
    }
};



产品

#ifndef CProductH
#define CProductH
#include<iostream>
#include<string>
using namespace std;
class CProduct
{
public:
    CProduct(){};
    ~CProduct(){};
    void GetProduct()
    {
        cout<<"you select "<<m_sDrink<<" "<<m_sFood<<" "<<m_sCocalate<<endl;
    }
             
    void SetDrink(const string &sDrink)
    {
        m_sDrink = sDrink;
    }
    void SetFood(const string &sFood)
    {
        m_sFood = sFood;
    }
    void SetCocalate(const string &sCocalate)
    {
        m_sCocalate = sCocalate;
    }
    string m_sDrink;
    string m_sFood;
    string m_sCocalate;    
};
#endif



主函数

#include "CDirecter.h"
#include "ContreadBuilderA.h"
#include "ContreadBuilderB.h"
int main()
{
    CDirecter *pCDirecter = new CDirecter();
        CConcreateA *pBuilderA = new CConcreateA();
    CProduct tProduct;
        tProduct = pCDirecter->Construct(pBuilderA);
    tProduct.GetProduct();
        CConcreateB *pBuilderB = new CConcreateB();
        tProduct = pCDirecter->Construct(pBuilderB);
    tProduct.GetProduct();
    char c= getchar();
    c = getchar();
    return 0;
}


本文出自 “风清扬song” 博客,请务必保留此出处http://2309998.blog.51cto.com/2299998/1388668

建造者模式,布布扣,bubuko.com

建造者模式

原文:http://2309998.blog.51cto.com/2299998/1388668

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!