文档章节

设计模式:第二、三章

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
【设计模式笔记】(十六)- 代理模式

一、简述 代理模式(Proxy Pattern),为其他对象提供一个代理,并由代理对象控制原有对象的引用;也称为委托模式。 其实代理模式无论是在日常开发还是设计模式中,基本随处可见,中介者模式中...

MrTrying
06/24
0
0
(目录)设计模式(可复用面向对象软件的基础)

本系列“设计模式”博客使用Golang语言实现算法。所谓算法是指解决一个问题的步骤,个人觉得不在于语言。小弟只是最近学习Golang,所以顺带熟练一下语法知识,别无它意。 本系列博客主要介绍...

chapin
2015/01/13
0
0
JavaScript设计模式之观察者模式

前言 准备研究一下MVVM的一些东西,由于MVVM运用了观察者模式的思想,因此翻开了《JavaScript设计模式与开发实践》一书,将观察者模式学习了一遍,顺便有对一些常用的设计模式进行一些了解,...

Srtian
05/22
0
0
设计模式梳理(一)

设计模式梳理(一) 总体来说设计模式分为三大类: @案例源码地址:https://gitlab.com/lxqxsyu/DisgnPattern 创建型模式 简单工厂模式 工厂类是整个模式的关键。它包含必要的判断逻辑,能够...

lxq_xsyu
2017/11/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

windbg学习记录

我开始熟练使用windbg是从帮助手册开始的,也就是.hh命令。 就像学习windows开发从msdn开始一样,微软的产品虽然不开源,但是文档做的是相当的好。然而那些开源的东西呢?开源的竞争力其实就...

simpower
19分钟前
0
0
学习scala的网站汇总

https://www.codacy.com/blog/how-to-learn-scala/

Littlebox
21分钟前
0
0
配置本地的cloud9开发环境

前言 说到在线IDE开发环境,cloud9是不能绕过的,cloud9支持很多语言,默认支持的就有Node.js,Python,Ruby,PHP,Go,更逆天的是,他还支持数据库,包括MySQL,MongoDB,Redis,SQLite。但...

Kefy
25分钟前
3
0
springcloud应用程序上下文层次结构

如果您从SpringApplication或SpringApplicationBuilder构建应用程序上下文,则将Bootstrap上下文添加为该上下文的父级。这是一个Spring的功能,即子上下文从其父进程继承属性源和配置文件,因...

itcloud
30分钟前
0
0
新程序员最爱的免费资源

简评:国外美女程序员推荐了她自己用过的一些免费资源,对新手比较友好的那种。 原作者 Ali Spittel,是个美女程序员,以下这些资源都是她自己试过的。以下「我」代表 Ali Spittel。 学 HTML...

极光推送
33分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部