zoukankan      html  css  js  c++  java
  • 设计模式生成器实现C++

    /*********************************
    *设计模式--生成器实现
    *C++语言
    *Author:WangYong
    *Blog:http://www.cnblogs.com/newwy
    ********************************/
    #include <iostream>
    using namespace std;
    class Product
    {
    	public:
    	Product(){cout<<"return a product"<<endl;}
    	~Product(){}
    	void ProducePart(){cout<<"build part of product"<<endl;}
    }; 
    class ProductPart
    {
    	public:
    	ProductPart(){cout<<"Build part of product"<<endl;}
    	~ProductPart(){}
    	
    	ProductPart* BuildPart(){return new ProductPart;}
    };
    
    class Builder 
    {
    	public:
    	virtual ~Builder(){};
    	virtual void BuilderPartA(const string & buildpara) = 0;
    	virtual void BuilderPartB(const string & buildpara) = 0;
    	virtual void BuilderPartC(const string & buildpara) = 0;
    	virtual Product * GetProduct() = 0;
    };
    
    class ConcreteBuilder:public Builder
    {
    	public:
    	ConcreteBuilder(){}
    	~ConcreteBuilder(){}
    	void BuilderPartA(const string & buildpara){cout<<"step:buildparaA.."<<buildpara<<endl;}
    	void BuilderPartB(const string & buildpara){cout<<"step:buildparaB.."<<buildpara<<endl;}
    	void BuilderPartC(const string & buildpara){cout<<"step:buildparaC.."<<buildpara<<endl;}
    	Product * GetProduct();
    	
    };
    Product* ConcreteBuilder:: GetProduct()
    {
    	BuilderPartA("pre defined");
    	BuilderPartB("pre defined");
    	BuilderPartC("pre defined");
    	return new Product();
    }
    class Director
    {
    	public:
    	Director(Builder *bld){_bld = bld;}
    	~Director(){}
    	void Constructor();
    	private:
    	Builder *_bld;
    };
    void Director::Constructor()
    {
    	_bld->BuilderPartA("user defined");
    	_bld->BuilderPartB("user defined");
    	_bld->BuilderPartC("user defined");
    }
    int main()
    {
    	Director * d = new Director(new ConcreteBuilder());
    	d->Constructor();
    	return 0;
    }
    
    
  • 相关阅读:
    四、Ubuntu16.04下TestLink的部署【测试管理必备工具】
    配置反向代理服务器
    三、Ubuntu16.04 安装Jira8.2.2(自带中文包)和破解
    二、Ubuntu16.04安装搜狗wps
    【C#实现漫画算法系列】-判断 2 的乘方
    [Entity Framework+MVC复习总结1]-WebForm与Asp.Net MVC
    【数据结构总结1】-数据结构的自述
    快速理解区块链
    CSS容器属性
    CSS background-clip 属性
  • 原文地址:https://www.cnblogs.com/newwy/p/1855200.html
Copyright © 2011-2022 走看看