创建类模式大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设计模式之一,这也是为什么该模式标记为零的原因.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的 ...
随机推荐
- 前端工程化与webpack
(1) 前端工程化 近几年来,前端领域飞速发展,前端的工作早已不再是切几张图,写几个页面那么简单,项目比较大时,很可能会多人协同开发,模块化,组件化,CSS预编译等技术也被广泛的使用.前端自动化( ...
- java引用数据类型在方法中的值传递
package org.jimmy.autosearch20180821.test; public class TestStringArr { public static void main(Stri ...
- 13C++异常处理
异常处理 14.1.1 异常处理的任务 程序编制者不仅要考虑程序没有错误的理想情况,更要考虑程序存在错误时的情况,应该能够尽快地发现错误,消除错误. 程序中常见的错误有两大类: 语法错误和运行错误.在 ...
- 子例程 subroutine
#! /usr/bin/perluse strict;use warnings;print "\n---------summation_STDIN_parameter----------\n ...
- Python tldextract模块
最新发布的 PyPI: pip install tldextract 或者最新的开发版本: pip install -e 'git://github.com/john-kurkowski/tldext ...
- 【design pattern】代理模式
前言 设计模式分为三大类: 创建型模式:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式: 结构型模式:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式: 行为型模式 ...
- PHP实现QQ第三方登录的方法
前言: PHP实现QQ快速登录,罗列了三种方法 方法一:面向过程,回调地址和首次触发登录写到了一个方法页面[因为有了if做判断], 方法二,三:面向对象 1.先调用登录方法,向腾讯发送请求,2.腾讯携 ...
- ThinkPHP5.X PHP5.6.27-nts + Apache 通过 URL 重写来隐藏入口文件 index.php
我们先来看看官方手册给出关于「URL 重写」的参考: 可以通过 URL 重写隐藏应用的入口文件 index.php ,Apache 的配置参考: 1.http.conf 配置文件加载 mod_rewr ...
- java发送短信验证码的功能实现
总结一下发送短信验证码的功能实现 (题外话:LZ是在腾讯云买的第三方(山东鼎信)短信服务平台的接口,1块钱20次的套餐来练手,哈哈,给他们打个广告,有需要的可以去购买哈,下面是购买链接短信服务平台购买 ...
- Leetcode 204计数质数
计数质数 统计所有小于非负整数 n 的质数的数量. 示例: 输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 . 比计算少n中素数的个数. 素数又称质 ...