创建类模式包含工厂方法模式、建造者模式、抽象工厂模式、单例模式和原型模式,它们都可以提供对象的创建和管理职责。当中的单例模式和原型模式很easy理解,单例模式是要保持在内存中仅仅有一个对象,原型模式是要求通过复制的方式产生一个新对象。这两个不easy混淆。以下主要分析其他三种模式。

一、工厂方法模式VS建造者模式

 

1、意图不同

在工厂方法模式里,关注的是一个产品总体,无须关心产品的各部分是怎样创建出来的。但在建造者模式中,一个详细产品的产生是依赖各个部件的产生以及装配顺序。它关注的是“由零件一步一步地组装出产品对象”,简单地说,工厂模式是一个对象创建的粗线条应用。建造者模式则是通过细线条勾勒出一个复杂对象,关注的是产品组成部分的创建过程。

2、产品的复杂度不同

工厂方法模式创建的产品一般都 是单一性质产品,而建造者模式创建的则是一个复合产品,它由各个部件复合而成。部件不同产品对象当然不同。这不是说工厂方法模式创建的对象简单。而是指它们的粒度大小不同。

一般来说,工厂方法模式的对象粒度比較粗,建造者模式的产品对象粒度比較细。

 

实践:假设须要具体关注一个产品部件的生产、安装步骤,则选择建造者,否则工厂。

 

 

二、抽象工厂模式VS建造者模式

 

抽象工厂模式就像一个巨头有很多“工厂”,使用“工厂”来描写叙述构建者。而建造者模式就像一个工厂有很多“车间”。使用“车间”来描写叙述构建者。抽象工厂模式是从一个更高层次去看对象的创建。详细到工厂内部还有非常多车间。但这些都是隐藏在工厂内部的细节,对外不发布。

而建造者模式就不同了,它是由车间构成,不同的车间完毕不同的创建和装配任务,一个完整的汽车生产过程须要引擎制造车间、引擎装配车间的配合才干完毕,它们配合的基础就是设计蓝图,而这个蓝图在车间主任手中(导演类)。建造者模式更关心建造过程。

尽管从外界来看一个车间还是生产车辆,可是这个车间的转型是非常快的,仅仅要又一次设计一个蓝图。就可以产生不同的产品。

实践:相对来说,抽象工厂模式比建造者模式的尺度要大,它关注产品总体。

而建造者模式关注构建过程,因此建行者模式能够非常easy地构建出一个崭新的产品。仅仅要导演类能够提供详细的工艺流程。也正由于如此。假设希望屏蔽对象的创建过程,仅仅提供一个封装良好的对象,则能够选择抽象工厂方法模式。

而建造者模式能够用在构件的装配方面。如通过装配不同的组件或者同样组件的不同顺序,能够产生一个新的对象。它能够产生一个非常灵活的架构,方便地扩展和维护系统。

创建类模式大PK(总结)的更多相关文章

  1. 设计模式之创建类模式大PK

                                        创建类模式大PK 创建类模式包括工厂方法模式.建造者模式.抽象工厂模式.单例模式和原型模式,他们能够提供对象的创建和管理职责.其 ...

  2. 第26章 创建型模式大PK

    26.1 工厂方法模式 VS 建造者模式 26.1.1 按工厂方法建造超人 (1)产品:两类超人,成年超人和未成年超人. (2)工厂:这里选择简单工厂 [编程实验]工厂方法建造超人 //创建型模式大P ...

  3. 设计模式之行为类模式大PK

                                        行为类模式大PK 行为类模式包括责任链模式.命令模式.解释器模式.迭代器模式.中介者模式.备忘录模式.观察者模式.状态模式.策略 ...

  4. 设计模式之结构类模式大PK

                                      结构类模式大PK 结构类模式包括适配器模式.桥梁模式.组合模式.装饰模式.门面模式.享元模式和代理模式.之所以称其为结构类模式,是因 ...

  5. 设计模式之创建类模式PK

    创建类模式包括: 工厂方法模式 建造者模式 抽象工厂模式 单例模式 原型模式 创建类模式能够提供对象的创建和管理职责. 其中单例模式和原型模式非常容易理解, 单例模式是要保持在内存中只有一个对象,原型 ...

  6. 第28章 行为型模式大PK

    27.1 策略模式 VS 命令模式 27.1.1 策略模式实现压缩算法 //行为型模式大PK——策略模式和命令模式 //实例:用策略模式实现压缩算法 #include <iostream> ...

  7. 第27章 结构型模式大PK

    27.1 代理模式 VS 装饰模式 27.1.1 代理模式 (1)场景:客人找运动员代理要求安排运动员参加比赛 (2)说明:代理人有控制权,可以拒绝客人的要求,也可以答应安排,甚至自己下去跑(因为有些 ...

  8. ZT 创建类模式总结篇

    创建类模式总结篇 分类: 设计模式 2012-03-26 09:03 7320人阅读 评论(11) 收藏 举报 编程优化设计模式任务 创建类模式主要关注对象的创建过程,将对象的创建过程进行封装,使客户 ...

  9. 创建类模式(零):简单/静态工厂(Static Factory)

    定义 简单工厂模式属于创建型模式,但不属于23种GOF设计模式之一,这也是为什么该模式标记为零的原因.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的 ...

随机推荐

  1. 洛谷——P1731 [NOI1999]生日蛋糕

    P1731 [NOI1999]生日蛋糕 搜索+剪枝 常见的剪枝: 若当前状态+后面所要搜索的最差的状态$>$或是$<$最后的状态,就返回 预处理最差的状态 #include<iost ...

  2. 笔试算法题(02):N阶阶乘 & 双向循环链表实现

    出题:N阶阶乘问题的递归算法和非递归算法: 分析: 第一种解法:普通暴力解法的实现较为容易: 第二种解法:stirling公式可快速给出近似解: 解题: int Recursive(int s) { ...

  3. 关于Map的遍历

    想起之前有人问过我这个,那就顺手写一下Map的遍历 Map<Integer, String> map = new HashMap<Integer, String>(); map ...

  4. 如何在 CentOS 7 上生成 SSL 证书为 Nginx 加密

    本文首发:开发指南:如何在 CentOS 7 上安装 Nginx Let’s Encrypt 是由 Internet Security Research Group (ISRG) 开发的一个自由.自动 ...

  5. Linux 下 Jenkins安装

    Jenkins介绍 Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布/测试项目. 2.监控外部调用执行的工作. 安装环境 操作系统:lin ...

  6. 集训第四周(高效算法设计)P题 (构造题)

    Description   There are N<tex2html_verbatim_mark> marbles, which are labeled 1, 2,..., N<te ...

  7. bzoj1455左偏树裸题

    #include <stdio.h> bool vi[1000010]; int n,de[1000010],ls[1000010],rs[1000010],va[1000010],fa[ ...

  8. 使用java发送电子邮件

    经常在账号绑定邮箱或找回密码时,邮箱会收到一条验证邮件,好奇用代码该怎么发送邮件,看到了许多相关的博客,实现步骤都写的很详细,今天照着其他博客的步骤也确实实现了代码发送邮件,在这里重新记录下步骤,加深 ...

  9. matplotlib的使用--折线图--入门

    目录 matplotlib应用介绍 一天天气变化图 两小时随机温度图 中文显示问题 个人交往统计图 多人交往统计图 总结 介绍: 举个例子(一天天气变化图): 假设一天中每隔两个小时(range(2, ...

  10. 全文检索(AB-1)-相关领域

    信息检索 认知科学 管理科学