文档章节

设计模式:第二、三章

wjpworking
 wjpworking
发布于 2016/12/08 13:40
字数 1493
阅读 0
收藏 0

第二章

层次结构信息的表述通常是通过一种被称为递归组合的技术来实现的。递归组合可以由较简单的元素逐渐建立复杂的元素。

获得跨越硬件和软件平台的可移植性是系统设计的主要问题之一。移植的一大障碍是不同视感标准之间的差异性。

一个平台将多个互相重叠的窗口展示在一个点阵显示器上。

图源抽象的一个重要作用就是隐藏了存储其子图源的数据结构,我们可以在不影响其他类的情况下改变图元的数据结构。

图元接口不应该偏重于某个数据结构。

一个好的解决方案是封装那些变化的概念。

分析对象怎样才能不使用类型测试或强制类型转换也能正确对待各种不同的图元。

第三章 创建型模式

创建型模式实例化了过程。

设计模式中两个不断出现的主旋律:

  1. 它们都将关于该系统使用哪些具体的类的信息封装起来
  2. 隐藏了这些类的实例是如何被创建和放在一起的

整个系统关于这些对象所知道的是由抽象类所定义的接口

Abstract Factory(抽象工厂)——对象创建型模式

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

适用:

  • 一个系统要独立于它是产品创建、组合和表示时
  • 一个系统要由多个产品系列中的一个来配置时
  • 当你要强调一系列相关的产品对象的设计以便进行联合适用时
  • 提供一个产品类库,而只想显示它们的接口而不是实现时

优缺点:

  1. 分离了具体的类
  2. 使得易于交换产品系列
  3. 有利于产品的一致性
  4. 难以支持新种类的产品

一些实现:

  1. 将工厂作为单件
  2. 创建产品
  3. 定义可扩展的工厂

一个具体的工厂通常是一个单件的

Builder(生成器)——对象创建模型模式

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

每一个转换器类创建和装配一个复杂对象的机制隐含在抽象接口的后面。

适用:

  • 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时
  • 当构造过程必须运行被构造的对象有不同表示时

效果:

  1. 它使你可以改变一个产品的内部表示
  2. 它将构造代码和表示代码分开
  3. 它使你对构造过程进行更精细的控制

Builder模式着重于一步步构造一个复杂对象。而Factory Method着重于多个系列的产品对象。Builder在最后一步返回厂品,而对于Abstract Factory来说,产品是立即返回的。

Factory Method(工厂方法)——对象创建型模式

定义一个用于创建对象的接口,让子类决定实例化哪一个类。

适用:

  • 当一个类不知道它所必须创建的对象的类的时候、
  • 当一个类希望由它的子类来指定它所创建的对象的时候
  • 当类将创建对象的职责委托给多个帮助子类的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候

效果:

  1. 为子类提供挂钩
  2. 连接评选的类层次

实现:

  1. 主要两种不同的情况
    1. 是一个抽象类并且不提供它所声明的工厂方法的实现
    2. 是一个具体类而且为工厂方法提供一个缺省的实现
  2. 参数化工厂方法
  3. 特定语言的变化和问题
  4. 使用模板以避免创建子类

Prototype(原型)——对象创建型模式

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

当一个系统应该独立于它的产品创建、构成和表示时,要用Prototype模式或

  • 当要实例化的类是在运行时刻指定时
  • 为了避免创建一个与产品类层次平行的工厂类层次时
  • 当一个类的实例只能与几个不同状态组合中的一种时

优点:

  1. 运行时刻增加和删除产品
  2. 改变值以指定新对象
  3. 改变结构以指定新对象
  4. 减少子类构造
  5. 用类动态配置应用

考虑的问题:

  1. 使用一个原型管理器
  2. 实现克隆操作
  3. 初始化克隆对象

Singleton(单件)——对象创建型模式

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

一个全局变量使得一个对象可以被访问,但它不能防止你实例化多个对象。一个更好的办法是让类自身负责保存它的唯一实例。

适用:

  • 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时
  • 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时

优点:

  1. 对唯一实例的受控访问
  2. 缩小名空间
  3. 允许对操作和表示的精化
  4. 允许可变数目的实例
  5. 比类操作更灵活

问题:

  1. 保证一个唯一实例
  2. 创建类的子类

© 著作权归作者所有

共有 人打赏支持
wjpworking
粉丝 6
博文 12
码字总数 19808
作品 0
朝阳
程序员
设计模式之禅(第2版).epub

【下载地址】 本书是设计模式领域公认的3本经典著作之一,“极具趣味,容易理解,但讲解又极为严谨和透彻”是本书的写作风格和方法的最大特点。第1版2010年出版,畅销至今,广受好评,是该领...

winter730
05/16
0
0
编程中的那些套路——关于策略模式

该文章属于《编程中的那些经典套路——设计模式汇总》系列,并且以下内容基于语言PHP 今天讲讲策略模式,策略模式 和工厂模式十分相像(或者说在代码逻辑层面,他们是一样的)。 但策略模式与...

gzchen
08/27
0
0
编程中的那些套路——关于装饰器模式

该文章属于《编程中的那些经典套路——设计模式汇总》系列,并且以下内容基于语言PHP 今天我们来谈谈装饰器模式,想象一个场景: 有一篇帖子 帖子的内容我写好了, 三个部门的人员想控制它. 编...

gzchen
08/27
0
0
编程中的那些经典套路——设计模式汇总

在正式阅读前,我先谈谈我们该用什么姿势和心态学习设计模式: 如果你还没有过多的编程经验(泛指半年以下),我建议你把它当做小说来看,能看懂多少是多少,因为半年以下经验的程序员用到设...

gzchen
08/27
0
0
编程中的那些套路——关于工厂模式

该文章属于《编程中的那些经典套路——设计模式汇总》系列,并且以下内容基于语言PHP 前面我们写了简单工厂模式,《编程中的那些套路——关于简单工厂模式》,但简单工厂模式有一些不足(违反...

gzchen
08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

awk命令用法介绍

10月18日任务 9.6/9.7 awk 1.awk(上)(下) 1.awk 分段操作功能 指定分隔符,并把第一段打印出来,不会改动文件内容 将所有内容打印出来 awk 没有指定分隔符号,则会默认用空格或者空白字符...

hhpuppy
40分钟前
1
0
Spring Cloud Eureka Server高可用之:在线扩容

本文共 1591字,阅读大约需要 6分钟 ! 概述 业务微服务化以后,我们要求服务高可用,于是我们可以部署多个相同的服务实例,并引入负载均衡机制。而微服务注册中心作为微服务化系统的重要单元...

CodeSheep
52分钟前
1
0
内网esxi主机上安装CoreOS虚拟机

CoreOS是一个为专门运行容器而设计的轻量级linux发行版,旨在通过轻量的系统架构和灵活的应用程序部署能力简化数据中心的维护成本和复杂度。它没有包管理工具,运行容器化应用以提供服务;默...

hiwill
今天
1
0
20181018 上课截图

![](https://oscimg.oschina.net/oscnet/49f66c08ab8c59a21a3b98889d961672f30.jpg) ![](https://oscimg.oschina.net/oscnet/a61bc2d618b403650dbd4bf68a671fabecb.jpg)......

小丑鱼00
今天
3
0
WinDbg

参考来自:http://www.cnit.net.cn/?id=225 SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols ctrl + d to open dump_file Microsoft (R) Windows Debugger Version 6.12.0002.633......

xueyuse0012
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部