设计模式之Builder模式
来源:互联网 发布:cc免费顶级域名注册 编辑:程序博客网 时间:2024/04/30 20:20
设计模式之Builder模式
1.介绍
Builder模式:当我们要创建的对象很复杂的时候,我们要将复杂对象的创建过程和这个对象的表示分离开来,这样做的好处就是通过一步步的进行复杂对象的构建,由于在每一步构造过程中可以引入参数,使得经过相同步骤创建最后得到的对象展示不一样.
2.实例代码
//Product.hclass Product{public:Product();~Product();void ProducePart();protected:private:};class ProdectPart{public:ProductPart();~ProductPart();ProdectPart* BuildPart();protected:private:};//Product.cpp#include "Component.h"Component::Component(){}Component::~Component(){}void Component::Add(const Component&com){}Component* Component::GetChild(int index){return 0;}void Component::Remove(const Component& com){}//Builder.h#include <string>using namespace std;class Product;class Builder{public:virtual ~Builder();virtual void BuildPartA(const string& buildPara)=0;virtual void BuildPartB(const string& buildPara)=0;virtual void BuildPartC(const string& buildPara)=0;protected:Builder();private:};class ConcreteBuilder:public Builder{public:ConcreteBuilder();~ConcreteBuilder();void BuildPartA(const string& buildPara);void BuildPartB(const string& buildPara);Product* GetProduct();protected:private:};//Builder.cpp#include “Builder.h”#include “Product.h”#include <iostream>using namespace std;Builder::Builder(){}Builder::~Builder(){}ConcreteBuilder::ConcreteBuilder(){}ConcreteBuilder::~ConcreteBuilder(){}void ConcreteBuilder::BuilderPatA(const string& buildPara){cout<<“Step1:Build PartA..”<<buildPara<<endl;}void ConcreteBuilder::BuilderPartB(const string& buildPara){cout<<“Step1:Build PartB...”<<buildPara<<endl;}void ConcreteBuilder::BuildPartC(const string& buildPara){cout<<“Step1:Build PartC...”<<buildPara<<endl;}Product* ConcreteBuilder::GetProduct(){BuildPartA(“pre-defined”);BuildPartB(“pre-defined”);BuildPartC(“pre-defined”);return new Product();}//Director.hclass Builder;class Director{public:Director(Builder* bld);~Director();void Construct();protectd:private:Builder* _bld;};//Director.cpp#include “director.h”#include “Builder.h”Director::Director(Builder* bld){_bld = bld;}Director::~Director(){}void Director::Construct(){_bld->BuildPartA(“user-defined”);_bld->BuildPartB(“user-defined”);_bld->BuildPartC(“user-defined”);}//main.cpp#include “Builder.h”#include “Product.h”#include “Director.h”#include <iostream>using namespace std;int main(int agrc,char* argv[]){Director* d=new Director(new ConcreteBuilder());d->Construct();return 0;}
3.结果
Builder模式代码中,BuildPart的参数是通过客户程序员引入的,用“user-deinded”代替,实际是在Construct方法中传入了这3个参数,
这样就可以得到不同的细微差别的复杂对象了。
0 0
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之 builder
- 设计模式之Builder
- 设计模式之builder
- Mega Man's Mission UVA11795(状态压缩dp)
- ROS Learning-006 beginner_Tutorials 编译ROS程序包
- CSS中!important的使用
- 【linux系统学习笔记】Ubuntu文本界面和图像界面的切换
- It seems that the port 3306 is already in use.aer you sure you want to use this port
- 设计模式之Builder模式
- 【模拟】Codeforces 691B s-palindrome
- 面试之JAVA
- MP4文件格式的解析,以及MP4文件的分割算法
- 面试之JAVAWEB
- webstorm快捷键
- POJ3678 Katu Puzzle (2-SAT检验)
- 面试之J2EE主流框架
- Spark——数据库(Hbase+Mysql)