建造者模式——探索之旅
2015-06-23 23:09
507 查看
,建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示。建造者模式的本质是使组装过程(用指挥者类进行封装,从而达到解耦的目的)和创建具体产品解耦,使我们不用去关心每个组件是如何组装的。
#pragma once
#include <iostream>
#include <list>
using namespace std;
struct IProductPart
{
};
class ProductPartA :public IProductPart
{
public:
ProductPartA()
{
cout << "build ProductPartA" << endl;
}
virtual ~ProductPartA(){}
void functionA()
{
cout << "enter functionA" << endl;
}
};
class ProductPartB :public IProductPart
{
public:
ProductPartB()
{
cout << "build ProductPartB" << endl;
}
virtual ~ProductPartB(){}
void functionB()
{
cout << "enter functionB" << endl;
}
};
class ProductPartC :public IProductPart
{
public:
ProductPartC()
{
cout << "build ProductPartC" << endl;
}
virtual ~ProductPartC(){}
void functionC()
{
cout << "enter functionC" << endl;
}
};
class Product
{
public:
Product()
{
_productList.clear();
}
virtual ~Product(){}
void add(IProductPart* part)
{
_productList.push_back(part);
}
private:
list<IProductPart*> _productList;
};
class Builder
{
public:
Builder()
{
_product = new Product;
}
virtual ~Builder(){}
virtual void buildPart() = 0;
virtual Product* getResult(){ return nullptr; }
protected:
template<typename T>
void _buildPart()
{
IProductPart* productPart = new T;
_product->add(productPart);
}
Product* _product;
};
class ConcreteBuilder:public Builder
{
public:
ConcreteBuilder(){}
virtual ~ConcreteBuilder(){}
virtual void buildPart()
{
_buildPart<ProductPartA>();
_buildPart<ProductPartB>();
_buildPart<ProductPartC>();
}
virtual Product* getResult()
{
return _product;
}
};
class Director
{
public:
Director(){}
virtual ~Director(){}
void Construct(Builder* builder)
{
builder->buildPart();
}
virtual Product* getResult(Builder* builder)
{
return builder->getResult();
}
};
void builderTest()
{
Builder* builder = new ConcreteBuilder;
Director* director = new Director;
director->Construct(builder);
director->getResult(builder);
}
#pragma once
#include <iostream>
#include <list>
using namespace std;
struct IProductPart
{
};
class ProductPartA :public IProductPart
{
public:
ProductPartA()
{
cout << "build ProductPartA" << endl;
}
virtual ~ProductPartA(){}
void functionA()
{
cout << "enter functionA" << endl;
}
};
class ProductPartB :public IProductPart
{
public:
ProductPartB()
{
cout << "build ProductPartB" << endl;
}
virtual ~ProductPartB(){}
void functionB()
{
cout << "enter functionB" << endl;
}
};
class ProductPartC :public IProductPart
{
public:
ProductPartC()
{
cout << "build ProductPartC" << endl;
}
virtual ~ProductPartC(){}
void functionC()
{
cout << "enter functionC" << endl;
}
};
class Product
{
public:
Product()
{
_productList.clear();
}
virtual ~Product(){}
void add(IProductPart* part)
{
_productList.push_back(part);
}
private:
list<IProductPart*> _productList;
};
class Builder
{
public:
Builder()
{
_product = new Product;
}
virtual ~Builder(){}
virtual void buildPart() = 0;
virtual Product* getResult(){ return nullptr; }
protected:
template<typename T>
void _buildPart()
{
IProductPart* productPart = new T;
_product->add(productPart);
}
Product* _product;
};
class ConcreteBuilder:public Builder
{
public:
ConcreteBuilder(){}
virtual ~ConcreteBuilder(){}
virtual void buildPart()
{
_buildPart<ProductPartA>();
_buildPart<ProductPartB>();
_buildPart<ProductPartC>();
}
virtual Product* getResult()
{
return _product;
}
};
class Director
{
public:
Director(){}
virtual ~Director(){}
void Construct(Builder* builder)
{
builder->buildPart();
}
virtual Product* getResult(Builder* builder)
{
return builder->getResult();
}
};
void builderTest()
{
Builder* builder = new ConcreteBuilder;
Director* director = new Director;
director->Construct(builder);
director->getResult(builder);
}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- PropertyChangeListener简单理解
- 关于指针的一些事情
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 设计模式之创建型模式
- 浅谈设计模式的学习
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解