创建类模式大PK(总结)
创建类模式包含工厂方法模式、建造者模式、抽象工厂模式、单例模式和原型模式,它们都可以提供对象的创建和管理职责。当中的单例模式和原型模式很easy理解,单例模式是要保持在内存中仅仅有一个对象,原型模式是要求通过复制的方式产生一个新对象。这两个不easy混淆。以下主要分析其他三种模式。
一、工厂方法模式VS建造者模式
1、意图不同
在工厂方法模式里,关注的是一个产品总体,无须关心产品的各部分是怎样创建出来的。但在建造者模式中,一个详细产品的产生是依赖各个部件的产生以及装配顺序。它关注的是“由零件一步一步地组装出产品对象”,简单地说,工厂模式是一个对象创建的粗线条应用。建造者模式则是通过细线条勾勒出一个复杂对象,关注的是产品组成部分的创建过程。
2、产品的复杂度不同
工厂方法模式创建的产品一般都 是单一性质产品,而建造者模式创建的则是一个复合产品,它由各个部件复合而成。部件不同产品对象当然不同。这不是说工厂方法模式创建的对象简单。而是指它们的粒度大小不同。
一般来说,工厂方法模式的对象粒度比較粗,建造者模式的产品对象粒度比較细。
实践:假设须要具体关注一个产品部件的生产、安装步骤,则选择建造者,否则工厂。
二、抽象工厂模式VS建造者模式
抽象工厂模式就像一个巨头有很多“工厂”,使用“工厂”来描写叙述构建者。而建造者模式就像一个工厂有很多“车间”。使用“车间”来描写叙述构建者。抽象工厂模式是从一个更高层次去看对象的创建。详细到工厂内部还有非常多车间。但这些都是隐藏在工厂内部的细节,对外不发布。
而建造者模式就不同了,它是由车间构成,不同的车间完毕不同的创建和装配任务,一个完整的汽车生产过程须要引擎制造车间、引擎装配车间的配合才干完毕,它们配合的基础就是设计蓝图,而这个蓝图在车间主任手中(导演类)。建造者模式更关心建造过程。
尽管从外界来看一个车间还是生产车辆,可是这个车间的转型是非常快的,仅仅要又一次设计一个蓝图。就可以产生不同的产品。
实践:相对来说,抽象工厂模式比建造者模式的尺度要大,它关注产品总体。
而建造者模式关注构建过程,因此建行者模式能够非常easy地构建出一个崭新的产品。仅仅要导演类能够提供详细的工艺流程。也正由于如此。假设希望屏蔽对象的创建过程,仅仅提供一个封装良好的对象,则能够选择抽象工厂方法模式。
而建造者模式能够用在构件的装配方面。如通过装配不同的组件或者同样组件的不同顺序,能够产生一个新的对象。它能够产生一个非常灵活的架构,方便地扩展和维护系统。
创建类模式大PK(总结)的更多相关文章
- 设计模式之创建类模式大PK
创建类模式大PK 创建类模式包括工厂方法模式.建造者模式.抽象工厂模式.单例模式和原型模式,他们能够提供对象的创建和管理职责.其 ...
- 第26章 创建型模式大PK
26.1 工厂方法模式 VS 建造者模式 26.1.1 按工厂方法建造超人 (1)产品:两类超人,成年超人和未成年超人. (2)工厂:这里选择简单工厂 [编程实验]工厂方法建造超人 //创建型模式大P ...
- 设计模式之行为类模式大PK
行为类模式大PK 行为类模式包括责任链模式.命令模式.解释器模式.迭代器模式.中介者模式.备忘录模式.观察者模式.状态模式.策略 ...
- 设计模式之结构类模式大PK
结构类模式大PK 结构类模式包括适配器模式.桥梁模式.组合模式.装饰模式.门面模式.享元模式和代理模式.之所以称其为结构类模式,是因 ...
- 设计模式之创建类模式PK
创建类模式包括: 工厂方法模式 建造者模式 抽象工厂模式 单例模式 原型模式 创建类模式能够提供对象的创建和管理职责. 其中单例模式和原型模式非常容易理解, 单例模式是要保持在内存中只有一个对象,原型 ...
- 第28章 行为型模式大PK
27.1 策略模式 VS 命令模式 27.1.1 策略模式实现压缩算法 //行为型模式大PK——策略模式和命令模式 //实例:用策略模式实现压缩算法 #include <iostream> ...
- 第27章 结构型模式大PK
27.1 代理模式 VS 装饰模式 27.1.1 代理模式 (1)场景:客人找运动员代理要求安排运动员参加比赛 (2)说明:代理人有控制权,可以拒绝客人的要求,也可以答应安排,甚至自己下去跑(因为有些 ...
- ZT 创建类模式总结篇
创建类模式总结篇 分类: 设计模式 2012-03-26 09:03 7320人阅读 评论(11) 收藏 举报 编程优化设计模式任务 创建类模式主要关注对象的创建过程,将对象的创建过程进行封装,使客户 ...
- 创建类模式(零):简单/静态工厂(Static Factory)
定义 简单工厂模式属于创建型模式,但不属于23种GOF设计模式之一,这也是为什么该模式标记为零的原因.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的 ...
随机推荐
- java线程池 多线程 搜索包含关键字的文件路径
package org.jimmy.searchfile20180807.main; public class ThreadMain implements Runnable{ private int ...
- 03CSS内容背景
CSS内容背景 设置背景颜色——background-color 插入背景图片——background-image 设置背景图片位置——background-position 设置重复背景图片—— ...
- Ubuntu下systemd服务的配置
1. 在/lib/systemd/system目录下创建服务启动脚本testservice.service 2. 文件内容如下: [Unit] Description=TestService [Ser ...
- centOS取消锁屏
自己在使用虚拟机运行centos 7时,centos 7默认几分钟不动就锁屏,实在很讨厌,所以在设置中将其去掉 1.左上角点击应用程序,在下面选择系统工具,在系统工具中选择设置 2.选择设置下面的隐私 ...
- copy on write
yl::string CBaseAutopProcessor::AddAuthorizedInfo(const yl::string & strOriginalUrl, const yl::s ...
- LCS以及输出路径模板
记忆 两个for用来寻找LCS,DP是二维的,每一维代表了字符串的长度. 寻找的代码部分 if(a[i-1]==b[j-1]) dp[i][j]=dp[i-1][j-1]+1; else dp[i][ ...
- [模板] Splay
欠了好久的Splay,以后就它了. 默写真不容易,过几天估计就忘了.. 整个Splay真的精妙,不拖泥带水那种.. 前驱后继之所以不能用rk转到根,是因为这个数不一定存在.. kth中<=老忘记 ...
- ibdata过大删除的方法
1.做数据库的逻辑备份 mysqldump -uroot -p123456 -B xx xx xx xx > /backup/all.sql 2.停止mysql进程 service mysqld ...
- nginx网站标准配置
#nginx开启的进程数worker_processes 4; #4核CPU #定义全局错误日志定义类型,[debug|info|notice|warn|crit]error_log ...
- nohup 忽略所有挂断信号
1.nohup 用途:不挂断地运行命令. 语法:nohup Command [ Arg … ] [ & ] 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup ...