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;
    }
    
    
  • 相关阅读:
    Bone Collector HDU
    Super Jumping! Jumping! Jumping! HDU
    147. 对链表进行插入排序
    C++ Program to Implement Sorted Circularly Doubly Linked List
    344. 反转字符串
    1360. 日期之间隔几天
    剑指 Offer 62. 圆圈中最后剩下的数字
    1441. 用栈操作构建数组
    594. 最长和谐子序列
    836. 矩形重叠
  • 原文地址:https://www.cnblogs.com/newwy/p/1855200.html
Copyright © 2011-2022 走看看