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;
    }
    
    
  • 相关阅读:
    gatekeeper学习概述
    通过浏览器下载服务器文件(日志)
    Jetty启动配置解析
    java单元测试小结
    TCP重传机制的学习应用
    laravel安装笔记 (转)
    TortoiseGit安装和使用的图文教程
    (转)HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解
    PHP session 跨子域问题总结
    PHP session详解
  • 原文地址:https://www.cnblogs.com/csnd/p/12061917.html
Copyright © 2011-2022 走看看