设计模式--建造者模式C++实现
建造者模式C++实现
1定义
将一个复杂对象的构建和他的表示分离,使得同样的构建过程可以创造不同的表示
注:在模板方法中,实现了父类调用子类方法的功能,且,通过钩子实现了方法的选择性调用。但是其中整体的顺序固定的,先做什么再做什么,不用做的通过钩子屏蔽。
而创造者模式就是对这个固定顺序进行调整使得其更好工作的一个模式。
2类图
角色分工:
Product产品类,通过模板方法模式实现,有基本方法和模板方法
Builder抽象建造者,规范产品的组件,一般由子类实现
ConcreteBuilder具体建造者,实现抽象类定义的所有方法,并返回一个创建好的对象
Director导演类,负责安排已有模块的顺序,然后告诉建造者开始建造
3实现
class Product
{
public:
Product();
~Product();
private:
string ProductPartA;
string ProductPartB;
string ProductPartC;
};
class Builder
{
public:
virtual ~Builder();
virtual void BuildPartA()=0;
virtual void BuildPartB()=0;
virtual void BuildPartC()=0;
virtual Product* GetProduct() = 0;
protected:
Builder();
private:
Product* _pro;
};
class ConcreteBuilder:public Builder
{
public:
ConcreteBuilder();
~ConcreteBuilder();
void BuildPartA();
void BuildPartB();
void BuildPartC();
Product* GetProduct();
};
class Director
{
public:
Director(Builder* bld);
~Director();
void Construct()
{
_bld->BuildPartA();
_bld->BuildPartB();
_bld->BuildPartC();
_bld->GetProduct();
}
protected:
private:
Builder* _bld;
};
3应用
①优点
封装性
建造者独立,容易扩展--》就是这个所谓不同的顺序的具体描述了
便于控制细节风险,细节问题封装在建造者中,所以互不影响
②使用场景
相同方法,不同顺序
多个部件可以组装,但是产生的结果不同时
产品类非常复杂或者调用顺序不同,产生的功能不同
对象创建过程中会使用到的系统中的其他对象时,这些对象在产品对象的创建过程不易得到时,可以采用建造者模式疯长该对象的创建过程。这是一个补偿方法。
③注意事项
建造者模式关注的是零件类型和装配工艺(顺序),这是他和工厂模式最大的不同。模板方法侧重子类控制父类
4扩展
在建造者模式中使用模板方法。就是前面已经用过的
建造者模式最主要的功能是基本方法的调用顺序安排,组装已有零件;而工厂模式则是造轮子。
设计模式--建造者模式C++实现的更多相关文章
- 3.java设计模式-建造者模式
Java设计模式-建造者模式 在<JAVA与模式>一书中开头是这样描述建造(Builder)模式的: 建造模式是对象的创建模式.建造模式可以将一个产品的内部表象(internal repr ...
- 设计模式—建造者模式(Builder)
title: 设计模式-建造者模式 建造者模式(Builder)是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节.建造者模式属于对 ...
- C#设计模式-建造者模式
在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成. 例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象,它是由C ...
- [Head First设计模式]山西面馆中的设计模式——建造者模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 引言 将学习融入生活中,是件很happy的事情,不会感 ...
- 说说设计模式~建造者模式(Builder)
返回目录 建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我 ...
- C++设计模式——建造者模式
建造者模式 在GOF的<设计模式 可复用面向对象软件的基础>中是这样说的:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 这句话,似懂非懂的.一个复杂对象的创建 ...
- Python设计模式——建造者模式
需求,画人物,要求画一个人的头,左手,右手,左脚,右脚和身体,画一个瘦子,一个胖子 不使用设计模式 #encoding=utf-8 __author__ = 'kevinlu1010@qq.com' ...
- 我的Java设计模式-建造者模式
在未上大学之前,一直有个梦想"I have a dream!",就是能成为一位汽车工程师,一直幻想着开着自己设计的汽车飞奔在公路上,迷倒了万千少女.咳咳~~虽然现在没实现我的dre ...
- 设计模式 | 建造者模式/生成器模式(builder)
定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 结构:(书中图,侵删) 一个产品类 一个指定产品各个部件的抽象创建接口 若干个实现了各个部件的具体实现的创建类 一个 ...
- java设计模式——建造者模式
一. 定义与类型 定义:将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示 用户只需制定需要建造的类型就可以得到它们,建造过程以及细节不需要知道 类型:创建型 建造者模式与工厂模 ...
随机推荐
- 详解MySQL第一篇—MySQL简要介绍及DDL语句
背景:近几年,开源数据库逐渐流行起来.由于具有免费使用.配置简单.稳定性好.性能优良等优点,开源数据库在中低端应用上占据了很大的市场份额,而 MySQL 正是开源数据库中的杰出代表.MySQL 数据库 ...
- POJ3176:Cow Bowling(数字三角形问题)
地址:http://poj.org/problem?id=3176 题目解析:没什么好说的,之前上课时老师讲过.从下往上找,每一个三角形的顶点可由两个角加上顶点的值 两种方式得到 ,用dp数组保存下最 ...
- DecisionTree
1.信息增益的定义,也就是互信息 2.信息增益的推导 由公式即可得到信息增益 信息增益存在偏向于选择取值较多的特征的问题,信息增益比可以对这一问题进行修正 3.信息增益比 4.基尼指数,基尼指数越大, ...
- 聊一聊 Django 中间件
Django默认的Middleware有七个: MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.cont ...
- C++ 对象的sizeof问题
需要补充.. 1. 注意虚函数的指针占4个字节.(当然是32位机器) #include <cstdlib> #include <ctime> #include <iost ...
- 微信小程序组件toast
操作反馈toast:官方文档 Demo Code: var toastNum = 2 var pageData = {} pageData.data = {} for(var i = 0; i < ...
- Zookeeper那些事
一. 什么是Zookeeper Zookeeper 是 Google 的 Chubby一个开源的实现,是 Hadoop 的分布式协调服务 它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务, ...
- JAVA中hashmap的分析
从http://blog.csdn.net/luanlouis/article/details/41576373?utm_source=tuicool&utm_medium=referral学 ...
- 【android】来电悬浮窗
先看下效果图 说下思路: 1:监听来电广播 2:根据来电号码,和本地数据库做匹配,有记录的,则提取出头像.名字.职位,生成悬浮窗 3:监听来电广播,如果当前行为是空闲的(没有任何通话行为),则删除掉悬 ...
- iOS知识点整理
1.宏定义 #define # ## a. 后面一个#是转成字符串 b. 后面## 是连接的作用 2. __attribute__ 常用的 __attribute__(( constructor ...