设计模式之建造者模式(C++实现)
来源:互联网 发布:mac ftpserver工具 编辑:程序博客网 时间:2024/05/21 04:15
这两天工作不忙,抽空学习了设计模式中的建造者模式,感觉《设计模式---可复用面向对象软件的基础》这本书不适合我看,有些东西写的太杂,反正我是没心情一点点的看,所以又买了一本《大话设计模式》,对于设计模式的学习今天看了一篇文章说:学习设计模式最主要的是记住模式的应用场景和UML图,深有感触,设计模式的思想靠死记硬背确实不是容易记住,好了,发发牢骚,言归正传,下面的对今天设计模式的总结以及对设计模式理解的代码实现。
建造者模式:将一个复杂的对象的构建和表示区分开来。最主要的特征了对象的创建必须按照一定的流程,指挥者使用建造者按照这个流程创建对象,该流程不可变,建造者在建造具体对象的细节是可变的,也就是对象的表示。
ifndef BUILDER_H_#define BUILDER_H_#include "product.h"class builder{//按照统一步骤构建产品,但是产品的构建过程对客户不可见,这样就可以创建不一样的产品,将对象的构建和它的表示实现分离的目的public:virtual void buildPartA(){};virtual void buildPartB(){};virtual void buildPartC(){};public:Product *product;};class ConcreteBuilderFat : public builder{public:ConcreteBuilderFat();~ConcreteBuilderFat();void buildPartA();void buildPartB();void buildPartC();Product * GetResult();};class ConcreteBuilderThin : public builder{public:ConcreteBuilderThin();~ConcreteBuilderThin();void buildPartA();void buildPartB();void buildPartC();Product * GetResult();};#endif
builder.cpp
#include "builder.h"void ConcreteBuilderFat::buildPartA(){product->SetPartA("胖子头");}void ConcreteBuilderFat::buildPartB(){product->SetPartB("胖子身子");}void ConcreteBuilderFat::buildPartC(){product->SetPartC("胖子脚");}Product* ConcreteBuilderFat::GetResult(){return this->product;}ConcreteBuilderFat::ConcreteBuilderFat(){product = new Product();}ConcreteBuilderFat::~ConcreteBuilderFat(){delete product;product = NULL;}void ConcreteBuilderThin::buildPartA(){product->SetPartA("瘦子头");}void ConcreteBuilderThin::buildPartB(){product->SetPartB("瘦子身子");}void ConcreteBuilderThin::buildPartC(){product->SetPartC("瘦子脚");}Product* ConcreteBuilderThin::GetResult(){return this->product;}ConcreteBuilderThin::ConcreteBuilderThin(){product = new Product();}ConcreteBuilderThin::~ConcreteBuilderThin(){delete product;product = NULL;}
Product.h
#ifndef PRODUCT_H_#define PRODUCT_H_#include <iostream>class Product{public:void SetPartA(std::string str){ partA = str; }void SetPartB(std::string str){ partB = str; };void SetPartC(std::string str){ partC = str; }void ShowPartA(){ std::cout << partA.c_str() << std::endl; }void ShowPartB(){ std::cout << partB.c_str() << std::endl; }void ShowPartC(){ std::cout << partC.c_str() << std::endl; }private:std::string partA,partB,partC;};#endif
Director.h
#ifndef DIRECTOR_H_#define DIRECTOR_H_#include"builder.h"class Director{public:void Construct();void SetBuilder(builder *);private:builder* m_builder;};#endif
Director.cpp
#include "Director.h"void Director::Construct(){m_builder->buildPartA();m_builder->buildPartB();m_builder->buildPartC();}void Director::SetBuilder(builder * builder){m_builder = builder;}
main.cpp
#include "Director.h"int main(){ConcreteBuilderFat *mBuilderfat = new ConcreteBuilderFat();Director dir;dir.SetBuilder(mBuilderfat);dir.Construct();Product *fat = mBuilderfat->GetResult();fat->ShowPartA();fat->ShowPartB();fat->ShowPartC();ConcreteBuilderThin * mbuilderThin = new ConcreteBuilderThin();dir.SetBuilder(mbuilderThin);dir.Construct();Product* thin = mbuilderThin->GetResult();thin->ShowPartA();thin->ShowPartB();thin->ShowPartC();delete mBuilderfat;delete mbuilderThin;//调用指挥者同样的构建过程Construct,可以创建不一样的对象,这就是讲对象的构建和表示分开,对象总是按照统一的步骤构建的return 0;}
0 0
- C#--设计模式之建造者模式
- C语言实现《设计模式之禅》之建造者模式
- 使用Object-C实现23种设计模式之建造者模式
- 设计模式之—建造者模式(Builder)-Java实现
- 设计模式之建造者模式,C++实现
- scala实现设计模式之建造者模式
- C++实现设计模式之--建造者模式
- 设计模式之建造者模式(C++实现)
- 设计模式之建造者模式(C++实现)
- 《大话设计模式》java实现之建造者模式
- 设计模式之建造者
- 设计模式 之 建造者
- 设计模式之建造者
- 设计模式C++实现--建造者模式
- 设计模式---建造者模式(C++实现)
- 设计模式之建造者模式
- 设计模式之建造者模式
- 五 设计模式之建造者模式
- 【lotus Notes/Source Insight/Notepad++】软件开发常用工具设置技巧,提高工作编码效率
- 网页内容写入word文档
- Spark Streaming性能优化系列-如何获得和持续使用足够的集群计算资源?
- Android Handler消息机制原理及总结
- mysql在线备份遇到的问题总结
- 设计模式之建造者模式(C++实现)
- 使用latex撰写elsevier论文,latex表格,插图以及调用的安装包
- JAVA I/O知识梳理
- SwipeRefreshLoadLayout + RecyclerView 实现下列刷新,上拉加载
- hjr教程-JAVA(二):JAVA连接MySql
- 工作记录-搜狗
- 安卓h5混合编程概述
- Haar分类器学习总结
- chrome下document.documentElement.scrollTop为0的解决方案