设计模式之美:Creational Patterns(创建型模式)
创建型模式(Creational Patterns)抽象了对象实例化过程。
它们帮助一个系统独立于如何创建、组合和表示它的那些对象。
- 一个类创建型模式使用继承改变被实例化的类。
- 一个对象创建型模式将实例化委托给另一个对象。
随着系统演化得越来越依赖于对象复合而不是类的继承,创建型模式变得更为重要。
在这些模式中,有两个不断出现的主旋律:
- 它们都将关于该系统使用那些具体的类的信息封装起来。
- 它们隐藏了这些类的实例是如何被创建和放在一起的。
因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以及何时创建这些方面给予你很大的灵活性。
Consequently, the creational patterns give you a lot of flexibility in what gets created, who creates it, how it gets created, and when.
- Factory Method (工厂方法)
- Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.
- 定义一个用于创建目标对象的接口,让子类决定实例化哪一个目标类。Factory Method 使一个类的实例化延迟到其子类。
- Prototype (原型)
- Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype.
- 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
- Abstract Factory (抽象工厂)
- Provide an interface for creating families of related or dependent objects without specifying their concrete classes.
- 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
- Builder (生成器)
- Separate the construction of a complex object from its representation so that the same construction process can create different representations.
- 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
- Singleton (单件)
- Ensure a class only has one instance, and provide a global point of access to it.
- 保证一个类仅有一个实例,并提供一个访问它的全局访问点。
用一个系统创建的那些对象的类对系统进行参数化有两种方法。
方法一:生成创建对象的类的子类(Subclass);这对应于使用 Factory Method 模式。
这种方法的缺点是,仅为了改变产品类,就可能需要创建一个新的子类。这样的改变可能是级联的。
方法二:对系统进行参数化的方法依赖于对象复合(Composition),定义一个对象负责明确产品对象的类,并将它作为该系统的参数。
这是 Abstract Factory、Builder、Prototype 模式的关键特征。
这三种模式都涉及到创建一个新的负责创建产品对象的“工厂对象”。
- Abstract Factory 由这个工厂对象产生多个类的对象。
- Builder 由这个工厂对象使用一个相对复杂的协议,逐步创建一个复杂产品。
- Prototype 由该工厂对象通过拷贝原型对象来创建产品对象。在这种情况下,因为原型负责返回产品对象,所以工厂对象和原型是同一个对象。
Factory Method 使一个设计可以定制且只略微有一些复杂。其他设计模式需要新的类,而 Factory Method 只需要一个新的操作。
使用 Abstract Factory、Builder、Prototype 的设计比使用 Factory Method 的设计更灵活,但它们也更加复杂。
通常,设计以使用 Factory Method 开始,并且当设计者发现需要更大的灵活性时,设计便会向其他创建型模式演化。
《设计模式之美》为 Dennis Gao 发布于博客园的系列文章,任何未经作者本人同意的人为或爬虫转载均为耍流氓。
设计模式之美:Creational Patterns(创建型模式)的更多相关文章
- php设计模式(一):简介及创建型模式
我们分三篇文章来总结一下设计模式在PHP中的应用,这是第一篇创建型模式. 一.设计模式简介 首先我们来认识一下什么是设计模式: 设计模式是一套被反复使用.容易被他人理解的.可靠的代码设计经验的总结. ...
- .NET设计模式(7):创建型模式专题总结(Creational Pattern)
):创建型模式专题总结(Creational Pattern) 创建型模式专题总结(Creational Pattern) --.NET设计模式系列之七 Terrylee,2006年1月 转载: ...
- .NET设计模式(7):创建型模式专题总结(Creational Pattern)(转)
概述 创建型模式,就是用来创建对象的模式,抽象了实例化的过程.它帮助一个系统独立于如何创建.组合和表示它的那些对象.本文对五种常用创建型模式进行了比较,通过一个游戏开发场景的例子来说该如何使用创建型模 ...
- C#面向对象设计模式纵横谈——2.Singleton 单件(创建型模式)
一:模式分类 从目的来看: 创建型(Creational)模式:负责对象创建. 结构型(Structural)模式:处理类与对象间的组合. 行为型(Behavioral)模式:类与对象交互中的职责分配 ...
- 设计模式(Java版)-创建型模式之简单工厂模式
前言:这段时间在学习设计模式,本人也是小菜一枚(所以写的如果有错误的地方请大大们给予指出).这个东西也是我一直想学习的,从点点滴滴做起,记录下自己每天的领悟! 一.工厂模式的动机 在软件系统中,经常面 ...
- NET设计模式 第二部分 创建型模式(6):创建型模式专题总结(Creational Pattern)
创建型模式专题总结(Creational Pattern) ——.NET设计模式系列之七 Terrylee,2006年1月 概述 创建型模式,就是用来创建对象的模式,抽象了实例化的过程.它帮助一个系统 ...
- Typescript玩转设计模式 之 创建型模式
作者简介 joey 蚂蚁金服·数据体验技术团队 前言 我们团队的工作是用单页面应用的方式实现web工具.涉及到数万到十数万行的前端代码的管理,而且项目周期长达数年. 怎么样很好地管理好这种量级的前端代 ...
- Java设计模式之创建型模式
创建型模式分为五类:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式 一.工厂方法模式:接口-实现类.工厂类
- 设计模式学习之建造者模式(Builder,创建型模式)(6)
假如我们需要建造一个房子,并且我们也不知道如何去建造房子,所以就去找别人帮我们造房子 第一步: 新建一个房子类House,里面有房子该有的属性,我们去找房子建造者接口HouseBuilder,我们要建 ...
随机推荐
- 块级格式化上下文(block formatting context)、浮动和绝对定位的工作原理详解
CSS的可视化格式模型中具有一个非常重要地位的概念——定位方案.定位方案用以控制元素的布局,在CSS2.1中,有三种定位方案——普通流.浮动和绝对定位: 普通流:元素按照先后位置自上而下布局,inli ...
- RMQ(范围最值问题)算法学习
RMQ算法适合求解对一个数组多次查询给定范围内的最值. 预处理操作: 令d[i,j]表示从i开始,长度为2^j的一段元素的最值,可以用递推公式写出d[i,j] = min{ d[i][j-1], d[ ...
- spark streaming 实战
最近在学习spark的相关知识, 重点在看spark streaming 和spark mllib相关的内容. 关于spark的配置: http://www.powerxing.com/spark-q ...
- confirm确认对话框
还记得之前的javascript入门里的讲的confirm 消息对话框吗?不记得也没关系,我们先来回顾一下,然后在详细讲它. 复习: confirm 消息对话框通常用于允许用户做选择的动作,如:“你对 ...
- EXCEL工作表保护密码忘记了,如何撤消工作表保护?
按下面步骤操作,如果不会发邮件给我吧 SamRichard@live.cn 1\打开文件 2\工具---宏----录制新宏---输入名字如:aa 3\停止录制(这样得到一个空宏) 4\工具---宏-- ...
- Tableview的更新和删除某一行
.tableView的刷新 > 数据刷新的总体步骤 * 修改模型数据 * 刷新表格(刷新界面) > 刷新表格(刷新界面)的方法 * 全局刷新(每一行都会重新刷新) - (void)relo ...
- 团队项目作业:利用NABCD模型进行竞争性需求分析
NABC正是这样的一套框架,当你试图提出一项崭新的提案之际,它能够提供四个思维基点,令你的商业策划具备天马行空的基础. 具体来说,NABC是四个关键词的首字母缩写- Need(需求)-现在市场上未被满 ...
- php基础-转义字符
1.php是弱类型语言,定义变量时无需要定义 2.标量类型:整形.浮点型.字符串类型.布尔型 复合类型:数组.对象 其它类型:资源类型(resource如数据库连接,打开文件句柄,资源在不需要时都要释 ...
- iOS(OC)中的冒泡排序
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"12",@"84", @"35& ...
- unreal3之FName及潜在bug
FName是unreal3里对字符串高效处理的一种机制 基本原理就是把字符串hash存起来,然后每个字符串就只需要用一个数组索引值来表示了 FName的属性: NAME_INDEX Index; IN ...