zoukankan      html  css  js  c++  java
  • 设计模式之建造者模式(Builder)

    建造者模式原理:建造模式主要是用于产生对象的各个组成部分,而抽象工厂模式则用于产生一系列对象,建造者模式而且要求这些对象的组成部分有序。

    代码如下:

    #include <iostream>
    using namespace std;
    
    class Builder
    {
    public:
    	virtual void buildHead(){}
    	virtual void buildBody(){}
    	virtual void buildLeftArm(){}
    	virtual void buildRightArm(){}
    	virtual void buildLeftLeg(){}
    	virtual void buildRightLeg(){}
    };
    class BuilderFat:public Builder
    {
    public:
    	virtual void buildHead(){cout << "fat head" <<endl;}
    	virtual void buildBody(){cout << "fat Body" << endl;}
    	virtual void buildLeftArm(){cout << "fat Left Arm" <<endl;}
    	virtual void buildRightArm(){cout << "fat Right Arm" <<endl;}
    	virtual void buildLeftLeg(){cout << "fat Left Leg" <<endl;}
    	virtual void buildRightLeg(){cout << "fat Right leg" <<endl;}
    };
    
    class BuilerThin:public Builder
    {
    public:
    		virtual void buildHead(){cout << " thin head" <<endl;}
    	virtual void buildBody(){cout << "thin Body" << endl;}
    	virtual void buildLeftArm(){cout << "thin Left Arm" <<endl;}
    	virtual void buildRightArm(){cout << "thin Right Arm" <<endl;}
    	virtual void buildLeftLeg(){cout << "thin Left Leg" <<endl;}
    	virtual void buildRightLeg(){cout << "thin Right leg" <<endl;}
    };
    
    class Director
    {
    public:
    	Director(Builder *ptmp = NULL):pBuilder(ptmp)
    	{
    		
    	}
    	void createPerson()
    	{
    		pBuilder->buildHead();
    		pBuilder->buildBody();
    		pBuilder->buildLeftArm();
    		pBuilder->buildRightArm();
    		pBuilder->buildRightArm();
    		pBuilder->buildLeftLeg();
    		pBuilder->buildRightLeg();
    	}
    private:
    	Builder* pBuilder;
    };
    
    int main()
    {
    	BuilderFat fat;
    	Director *pDirector = new Director(&fat);
    	pDirector->createPerson();
    	delete pDirector;
    	return 0;
    }
    
  • 相关阅读:
    49. 字母异位词分组
    73. 矩阵置零
    Razor语法问题(foreach里面嵌套if)
    多线程问题
    Get json formatted string from web by sending HttpWebRequest and then deserialize it to get needed data
    How to execute tons of tasks parallelly with TPL method?
    How to sort the dictionary by the value field
    How to customize the console applicaton
    What is the difference for delete/truncate/drop
    How to call C/C++ sytle function from C# solution?
  • 原文地址:https://www.cnblogs.com/liuweilinlin/p/3203305.html
Copyright © 2011-2022 走看看