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;
    }
    
    
  • 相关阅读:
    中文分词技术
    布隆过滤器(Bloom Filter)详解
    真正理解Mysql的四种隔离级别
    从内核文件系统看文件读写过程
    如何评价腾讯开源的消息中间件TubeMQ?
    零拷贝(Zero-copy)及其应用详解
    深入了解RabbitMQ
    (四)下载利器aria2
    (三)轻量级文件服务器filebrowser
    log4j 2整理
  • 原文地址:https://www.cnblogs.com/csnd/p/12061917.html
Copyright © 2011-2022 走看看