zoukankan      html  css  js  c++  java
  • 设计模式复习-建造者模式

    将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

    
    #pragma once
    #include "stdafx.h"
    #include<list>
    #include<string>
    #include<iostream>
    #include<windows.h>
    using namespace std;
    
    //设计模式-建造者模式 Builder
    
    //Product类-产品类,由多个部件组成。
    class Product {
    private:
    	list<string>mParts;
    public:
    	Product() {
    		mParts.clear();
    	}
    	VOID Add(string strPart) {
    		mParts.push_back(strPart);
    	}
    	VOID Show() {
    		cout << "产品创建" << endl;
    		for each(string index in mParts) {
    			cout << index << endl;
    		}
    	}
    };
    
    //Builder类-抽象建造者
    class Builder {
    public:
    	virtual VOID BuildPartA() = 0;
    	virtual VOID BuildPartB() = 0;
    	virtual Product* GetProduct() = 0;
    };
    
    //建造者1
    class ConcreteBuilder1 :public Builder {
    private:
    	Product * mpProduct = NULL;
    public:
    	ConcreteBuilder1() {mpProduct = new Product();}
    	~ConcreteBuilder1() {delete mpProduct;}
    
    	VOID BuildPartA() {
    		mpProduct->Add("部件A");
    	}
    	VOID BuildPartB() {
    		mpProduct->Add("部件B");
    	}
    	Product* GetProduct() {
    		return mpProduct;
    	}
    };
    
    //建造者2
    class ConcreteBuilder2 :public Builder {
    private:
    	Product * mpProduct = NULL;
    public:
    	ConcreteBuilder2() { mpProduct = new Product(); }
    	~ConcreteBuilder2() { delete mpProduct; }
    
    	VOID BuildPartA() {
    		mpProduct->Add("部件X");
    	}
    	VOID BuildPartB() {
    		mpProduct->Add("部件Y");
    	}
    	Product* GetProduct() {
    		return mpProduct;
    	}
    };
    
    //Director-指挥者类
    class Director {
    public:
    	VOID Construct(Builder *pConcreteBuilder) {
    		pConcreteBuilder->BuildPartA();
    		pConcreteBuilder->BuildPartB();
    	}
    };
    
    
    int main()
    {
    	Director *mDirector = new Director();
    	ConcreteBuilder1 * pBuilder1 = new ConcreteBuilder1();
    	ConcreteBuilder2 * pBuilder2 = new ConcreteBuilder2();
    	
    	mDirector->Construct(pBuilder1);
    	mDirector->Construct(pBuilder2);
    	Product *pProduct1 = pBuilder1->GetProduct();
    	Product *pProduct2 = pBuilder2->GetProduct();
    
    	pProduct1->Show();
    	pProduct2->Show();
    
    	delete mDirector;
    	delete pBuilder1, delete pBuilder2;
    	//delete pProduct1, delete pProduct2;
    
    	getchar();
    	return 0;
    }
    
    
  • 相关阅读:
    饮冰三年-人工智能-Python-35权限管理(万能的权限通用模块)
    饮冰三年-人工智能-Python-34CRM项目实战
    饮冰三年-人工智能-Python-33权限管理(通过配置快速生成列表)
    集腋成裘-15-MongoDB系列-02Find详细
    集腋成裘-14-MongoDB系列-01初识MongoDB
    饮冰三年-人工智能-Python-33博客园山寨版之报障管理
    饮冰三年-人工智能-Python-32博客园山寨版之后台管理
    JVM内存管理
    连接池实现原理
    定时器
  • 原文地址:https://www.cnblogs.com/csnd/p/12061917.html
Copyright © 2011-2022 走看看