博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
建造者模式
阅读量:5077 次
发布时间:2019-06-12

本文共 2099 字,大约阅读时间需要 6 分钟。

      建造者模式
,将一个复杂对象的构建与它的表示分离,使得相同的构建过程能够创建不同的表示。
      建造者模式能够将一个产品的内部表象与产品的生成过程切割开来,从而能够使一个建造过程生成具有不同的内部表象的产品对象。

假设我们使用了建造者模式。那么用户就仅仅需指定须要建造的类型就能够得到他们,而详细建造的过程和细节就不须要知道了。

Product就是详细产品类,由多个部件组成。
Builder是为创建一个Product对象的各个部件指定的抽象接口。
ConcreteBuilder是详细的建造者,实现Builder的接口。构造和装配各个部件。
指挥者Director就是依据需求的详细建造步骤。

建造者模式的优点就是使得建造代码与表示代码分离,因为建造者隐藏了该产品是怎样组装的,所以若须要改变一个产品的内部表示,仅仅须要再定义一个详细的建造者就能够了。
代码:
//Builder.h
#include "stdafx.h"#include 
#include
using namespace std;class Product{private: std::string _partA; std::string _partB; std::string _partC;public: void SetPartA(const string& partA) { cout << "Product:A" << endl; _partA = partA; } void SetPartB(const string& partB) { cout << "Product:B" << endl; _partB = partB; } void SetPartC(const string& partC) { cout << "Product:C" << endl; _partC = partC; }};class Builder{public: virtual void BuildPartA() = 0; virtual void BuildPartB() = 0; virtual void BuildPartC() = 0; virtual Product* GetProduct() = 0; Builder(){} virtual ~Builder(){}};class ConcreteBuilder :public Builder{private: Product* _pProduct;public: ConcreteBuilder() :Builder() { _pProduct = new Product(); } ~ConcreteBuilder() { delete(_pProduct); _pProduct = NULL; } virtual void BuildPartA() { cout << "ConcreteBuilder:A" << endl; _pProduct->SetPartA("A"); } virtual void BuildPartB() { cout << "ConcreteBuilder:B" << endl; _pProduct->SetPartB("B"); } virtual void BuildPartC() { cout << "ConcreteBuilder:C" << endl; _pProduct->SetPartC("C"); } virtual Product* GetProduct() { return this->_pProduct; }};class Director{private: Builder *_pBuilder;public: ~Director() { } Director(Builder* builder) { _pBuilder = builder; } void Construct() { _pBuilder->BuildPartA(); _pBuilder->BuildPartB(); _pBuilder->BuildPartC(); }};
// BuilderPattern.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "Builder.h"int _tmain(int argc, _TCHAR* argv[]){	Director *pDirector = new Director(new ConcreteBuilder());	pDirector->Construct();	getchar();	return 0;}

转载于:https://www.cnblogs.com/mfrbuaa/p/5326421.html

你可能感兴趣的文章
OO设计的接口分隔原则
查看>>
数据库连接字符串大全 (转载)
查看>>
java类加载和对象初始化
查看>>
对于负载均衡的理解
查看>>
django简介
查看>>
window.event在IE和Firefox的异同
查看>>
常见的js算法面试题收集,es6实现
查看>>
IO流写出到本地 D盘demoIO.txt 文本中
查看>>
Windows10 下Apache服务器搭建
查看>>
HDU 5458 Stability
查看>>
左手坐标系和右手坐标系
查看>>
solr后台操作Documents之增删改查
查看>>
http://yusi123.com/
查看>>
文件文本的操作
查看>>
Ubuntu linux下gcc版本切换
查看>>
记一次Web服务的性能调优
查看>>
Linux常用命令大全
查看>>
jQuery.form.js使用
查看>>
(转)linux sort,uniq,cut,wc命令详解
查看>>
关于ExecuteNonQuery执行的返回值(SQL语句、存储过程)
查看>>