好书系列之-设计模式:可复用面向对象软件的基础 1


第1章引言
设计面向对象软件比较困难,而设计可复用的面向对象软件就更加困难。你必须找到相
关的对象,以适当的粒度将它们归类,再定义类的接口和继承层次,建立对象之间的基本关
系。你的设计应该对手头的问题有针对性,同时对将来的问题和需求也要有足够的通用性。
你也希望避免重复设计或尽可能少做重复设计。有经验的面向对象设计者会告诉你,要一下
子就得到复用性和灵活性好的设计,即使不是不可能的至少也是非常困难的。一个设计在最
终完成之前常要被复用好几次,而且每一次都有所修改。
有经验的面向对象设计者的确能做出良好的设计,而新手则面对众多选择无从下手,总
是求助于以前使用过的非面向对象技术。新手需要花费较长时间领会良好的面向对象设计是
怎么回事。有经验的设计者显然知道一些新手所不知道的东西,这又是什么呢?
内行的设计者知道:不是解决任何问题都要从头做起。他们更愿意复用以前使用过的解
决方案。当找到一个好的解决方案,他们会一遍又一遍地使用。这些经验是他们成为内行的
部分原因。因此,你会在许多面向对象系统中看到类和相互通信的对象( c o m m u n i c a t i n g
o b j e c t)的重复模式。这些模式解决特定的设计问题,使面向对象设计更灵活、优雅,最终复
用性更好。它们帮助设计者将新的设计建立在以往工作的基础上,复用以往成功的设计方案。
一个熟悉这些模式的设计者不需要再去发现它们,而能够立即将它们应用于设计问题中。
以下类比可以帮助说明这一点。小说家和剧本作家很少从头开始设计剧情。他们总是沿
袭一些业已存在的模式,像“悲剧性英雄”模式(《麦克白》、《哈姆雷特》等)或“浪漫小说”
模式(存在着无数浪漫小说)。同样地,面向对象设计员也沿袭一些模式,像“用对象表示状态”
和“修饰对象以便于你能容易地添加/删除属性”等。一旦懂得了模式,许多设计决策自然而
然就产生了。
我们都知道设计经验的重要价值。你曾经多少次有过这种感觉—你已经解决过了一个问
题但就是不能确切知道是在什么地方或怎么解决的?如果你能记起以前问题的细节和怎么解
决它的,你就可以复用以前的经验而不需要重新发现它。然而,我们并没有很好记录下可供
他人使用的软件设计经验。
这本书的目的就是将面向对象软件的设计经验作为设计模式记录下来。每一个设计模式
系统地命名、解释和评价了面向对象系统中一个重要的和重复出现的设计。我们的目标是将
设计经验以人们能够有效利用的形式记录下来。鉴于此目的,我们编写了一些最重要的设计
模式,并以编目分类的形式将它们展现出来。
设计模式使人们可以更加简单方便地复用成功的设计和体系结构。将已证实的技术表述
成设计模式也会使新系统开发者更加容易理解其设计思路。设计模式帮助你做出有利于系统
复用的选择,避免设计损害了系统复用性。通过提供一个显式类和对象作用关系以及它们之
间潜在联系的说明规范,设计模式甚至能够提高已有系统的文档管理和系统维护的有效性。
简而言之,设计模式可以帮助设计者更快更好地完成系统设计。
本书中涉及的设计模式并不描述新的或未经证实的设计,我们只收录那些在不同系统中
多次使用过的成功设计。这些设计的绝大部分以往并无文档记录,它们或是来源于面向对象
设计者圈子里的非正式交流,或是来源于某些成功的面向对象系统的某些部分,但对设计新
手来说,这些东西是很难学得到的。尽管这些设计不包含新的思路,但我们用一种新的、便
于理解的方式将其展现给读者,即:具有统一格式的、已分类编目的若干组设计模式。
尽管该书涉及较多的内容,但书中讨论的设计模式仅仅包含了一个设计行家所知道的部
分。书中没有讨论与并发或分布式或实时程序设计有关的模式,也没有收录面向特定应用领
域的模式。本书并不准备告诉你怎样构造用户界面、怎样写设备驱动程序或怎样使用面向对
象数据库,这些方面都有自己的模式,将这些模式分类编目也是件很有意义的事。
1.1 什么是设计模式
Christopher Alexander 说过:“每一个模式描述了一个在我们周围不断重复发生的问题,
以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”
[ A I S + 7 7,第1 0页]。尽管A l e x a n d e r所指的是城市和建筑模式,但他的思想也同样适用于面向
对象设计模式,只是在面向对象的解决方案里,我们用对象和接口代替了墙壁和门窗。两类
模式的核心都在于提供了相关问题的解决方案。
一般而言,一个模式有四个基本要素:
1. 模式名称(pattern name) 一个助记名,它用一两个词来描述模式的问题、解决方案
和效果。命名一个新的模式增加了我们的设计词汇。设计模式允许我们在较高的抽象层次上
进行设计。基于一个模式词汇表,我们自己以及同事之间就可以讨论模式并在编写文档时使
用它们。模式名可以帮助我们思考,便于我们与其他人交流设计思想及设计结果。找到恰当
的模式名也是我们设计模式编目工作的难点之一。
2. 问题(problem) 描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后
果,它可能描述了特定的设计问题,如怎样用对象表示算法等。也可能描述了导致不灵活设
计的类或对象结构。有时候,问题部分会包括使用模式必须满足的一系列先决条件。
3. 解决方案(solution) 描述了设计的组成成分,它们之间的相互关系及各自的职责和协
作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定
而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合
(类或对象组合)来解决这个问题。
4. 效果(consequences) 描述了模式应用的效果及使用模式应权衡的问题。尽管我们描述
设计决策时,并不总提到模式效果,但它们对于评价设计选择和理解使用模式的代价及好处
具有重要意义。软件效果大多关注对时间和空间的衡量,它们也表述了语言和实现问题。因
为复用是面向对象设计的要素之一,所以模式效果包括它对系统的灵活性、扩充性或可移植
性的影响,显式地列出这些效果对理解和评价这些模式很有帮助。
出发点的不同会产生对什么是模式和什么不是模式的理解不同。一个人的模式对另一个
人来说可能只是基本构造部件。本书中我们将在一定的抽象层次上讨论模式。《设计模式》并
不描述链表和h a s h表那样的设计,尽管它们可以用类来封装,也可复用;也不包括那些复杂
的、特定领域内的对整个应用或子系统的设计。本书中的设计模式是对被用来在特定场景下
解决一般设计问题的类和相互通信的对象的描述。
一个设计模式命名、抽象和确定了一个通用设计结构的主要方面,这些设计结构能被用
2 设计模式:可复用面向对象软件的基础

来构造可复用的面向对象设计。设计模式确定了所包含的类和实例,它们的角色、协作方式
以及职责分配。每一个设计模式都集中于一个特定的面向对象设计问题或设计要点,描述了
什么时候使用它,在另一些设计约束条件下是否还能使用,以及使用的效果和如何取舍。既
然我们最终要实现设计,设计模式还提供了C++ 和S m a l l t a l k示例代码来阐明其实现。
虽然设计模式描述的是面向对象设计,但它们都基于实际的解决方案,这些方案的实现
语言是Smalltalk 和C + +等主流面向对象编程语言,而不是过程式语言( P a s c a l、C、A d a )或更具
动态特性的面向对象语言( C L O S、D y l a n、S e l f )。我们从实用角度出发选择了Smalltalk 和C + +,
因为在这些语言的使用上,我们积累了许多经验,况且它们也变得越来越流行。
程序设计语言的选择非常重要,它将影响人们理解问题的出发点。我们的设计模式采用了
Smalltalk 和C + +层的语言特性,这个选择实际上决定了哪些机制可以方便地实现,而哪些则
不能。若我们采用过程式语言,可能就要包括诸如“继承”、“封装”和“多态”的设计模式。
相应地,一些特殊的面向对象语言可以直接支持我们的某些模式,例如: C L O S支持多方法
(m u l t i - m e t h o d)概念,这就减少了Vi s i t o r模式的必要性。事实上, S m a l l t a l k和C + +已有足够的
差别来说明对某些模式一种语言比另一种语言表述起来更容易一些(参见5 . 4节Iterator 模式)。
1.2 Smalltalk MVC中的设计模式
在S m a l l t a l k - 8 0中,类的模型/视图/控制器( M o d e l / Vi e w / C o n t r o l l e r)三元组( M V C )被用来
构建用户界面。透过MVC 来看设计模式将帮助我们理解“模式”这一术语的含义。
M V C包括三类对象。模型M o d e l是应用对象,视图Vi e w是它在屏幕上的表示,控制器
C o n t r o l l e r定义用户界面对用户输入的响应方式。不使用M V C,用户界面设计往往将这些对象
混在一起,而M V C则将它们分离以提高灵活性和复用性。
M V C通过建立一个“订购/通知”协议来分离视图和模型。视图必须保证它的显示正确地
反映了模型的状态。一旦模型的数据发生变化,模型将通知有关的视图,每个视图相应地得
到刷新自己的机会。这种方法可以让你为一个模型提供不同的多个视图表现形式,也能够为
一个模型创建新的视图而无须重写模型。
下图显示了一个模型和三个视图(为了简单起见我们省略了控制器)。模型包含一些数据
值,视图通过电子表格、柱状图、饼图这些不同的方式来显示这些数据。当模型的数据发生
变化时,模型就通知它的视图,而视图将与模型通信以访问这些数据值。
第1章引言3

视图
模型
表面上看,这个例子反映了将视图和模型分离的设计,然而这个设计还可用于解决更一
般的问题:将对象分离,使得一个对象的改变能够影响另一些对象,而这个对象并不需要知
道那些被影响的对象的细节。这个更一般的设计被描述成O b s e r v e r(5 . 7)模式。
M V C的另一个特征是视图可以嵌套。例如,按钮控制面板可以用一个嵌套了按钮的复杂
视图来实现。对象查看器的用户界面可由嵌套的视图构成,这些视图又可复用于调试器。
M V C用Vi e w类的子类—C o m p o s i t e Vi e w类来支持嵌套视图。C o m p o s i t e Vi e w类的对象行为上
类似于Vi e w类对象,一个组合视图可用于任何视图可用的地方,但是它包含并管理嵌套视图。
上例反映了可以将组合视图与其构件平等对待的设计,同样地,该设计也适用于更一般
的问题:将一些对象划为一组,并将该组对象当作一个对象来使用。这个设计被描述为
C o m p o s i t e(4 . 3)模式,该模式允许你创建一个类层次结构,一些子类定义了原子对象(如
B u t t o n)而其他类定义了组合对象( C o m p o s i t e Vi e w),这些组合对象是由原子对象组合而成
的更复杂的对象。
M V C允许你在不改变视图外观的情况下改变视图对用户输入的响应方式。例如,你可能
希望改变视图对键盘的响应方式,或希望使用弹出菜单而不是原来的命令键方式。M V C将响
应机制封装在C o n t r o l l e r对象中。存在着一个C o n t r o l l e r的类层次结构,使得可以方便地对原有
C o n t r o l l e r做适当改变而创建新的C o n t r o l l e r。
Vi e w使用C o n t r o l l e r子类的实例来实现一个特定的响应策略。要实现不同的响应策略只要
用不同种类的C o n t r o l l e r实例替换即可。甚至可以在运行时刻通过改变Vi e w的C o n t r o l l e r来改变
Vi e w对用户输入的响应方式。例如,一个Vi e w可以被禁止接收任何输入,只需给它一个忽略
输入事件的C o n t r o l l e r。
Vi e w - C o n t r o l l e r关系是S t r a t e g y(5 . 9)模式的一个例子。一个策略是一个表述算法的对象。
当你想静态或动态地替换一个算法,或你有很多不同的算法,或算法中包含你想封装的复杂
数据结构,这时策略模式是非常有用的。
M V C还使用了其他的设计模式,如:用来指定视图缺省控制器的Factory Method(3.3)和
用来增加视图滚动的D e c o r a t o r ( 4 . 4 )。但是M V C的主要关系还是由O b s e r v e r、C o m p o s i t e和
S t r a t e g y三个设计模式给出的。
1.3 描述设计模式
我们怎样描述设计模式呢?图形符号虽然很重要也很有用,却还远远不够,它们只是将
设计过程的结果简单记录为类和对象之间的关系。为了达到设计复用࿰

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基本信息 原名: Design Patterns:Elements of Reusable Object-Oriented software 原出版社: Addison Wesley/Pearson 作者: (美)Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides [作译者介绍] 译者: 李英军 马晓星 蔡敏 刘建中 丛名: 计算机科学丛 出版社:机械工业出版社 ISBN:7111075757 上架时间:2005-7-19 出版日期:2004 年9月 开本:16开 页码:254 版次:1-11 内容简介   本结合设计实例从面向对象设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别有用。本适合大学计算机专业的学生、研究生及相关人员参考。       [strong][font color="#ff0000"]评[/font][/strong][font color="#ff0000"]       “这本众人期待的确达到了预期的全部效果。该云集了经过时间考验的可用设计。作者从多年的面向对象设计经验中精选了23个模式,这构成了该的精华部份,每一个精益求精的优秀程序员都应拥有这本《设计模式》。”--larry o'brien, software development       “[设计模式]在实用环境下特别有用,因为它分类描述了一组设计良好,表达清楚的面向对象软件设计模式。整个设计模式领域还很新,本的四位作者也许已占据了这个领域造诣最深的专家中的半数,因而他们定义模式的方法可以作为后来者的榜样。如果要知道怎样恰当定义和描述设计模式,我们应该可以从他们那儿获得启发”--steve billow, journal of object-oriented programming       “总的来讲,这本表达了一种极有价值的东西。对软件设计领域有着独特的贡献,因为它捕获了面向对象设计的有价值的经验,并且用简洁可复用的形式表达出来。它将成为我在寻找面向对象设计思想过程中经常翻阅的一本﹕这正是复用的真实含义所在,不是吗﹖”--sanjiv gossain, journal of object-oriented programming [/font] 目 录 序言 前言 读者指南 第1章 引言 1 1.1 什么是设计模式 2 1.2 smalltalk mvc中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象接口 9 1.6.4 描述对象的实现 10 1.6.5 运用复用机制 13 1.6.6 关联运行时刻和编译时刻的 结构 15 1.6.7 设计应支持变化 16 1.7 怎样选择设计模式 19 .1.8 怎样使用设计模式 20 第2章 实例研究:设计一个文档编 辑器 22 2.1 设计问题 23 2.2 文档结构 23 2.2.1 递归组合 24 2.2.2 图元 25 2.2.3 组合模式 27 2.3 格式化 27 2.3.1 封装格式化算法 27 2.3.2 compositor和composition 27 2.3.3 策略模式 29 2.4 修饰用户界面 29 2.4.1 透明围栏 29 2.4.2 monoglyph 30 2.4.3 decorator 模式 32 2.5 支持多种视感标准 32 2.5.1 对象创建的抽象 32 2.5.2 工厂类和产品类 33 2.5.3 abstract factory模式 35 2.6 支持多种窗口系统 35 2.6.1 我们是否可以使用abstract factory 模式 35 2.6.2 封装实现依赖关系 35 2.6.3 window和windowimp 37 2.6.4 bridge 模式 40 2.7 用户操作 40 2.7.1 封装一个请求 41 2.7.2 command 类及其子类 41 2.7.3 撤消和重做 42 2.7.4 命令历史记录 42 2.7.5 command 模式 44 2.8 拼写检查和断字处理 44 2.8.1 访问分散的信息 44 2.8.2 封装访问和遍历 45 2.8.3 iterator类及其子类 46 2.8.4 iterator模式 48 2.8.5 遍历和遍历过程中的动作 48 2.8.6 封装分析 48 2.8.7 visitor 类及其子类 51 2.8.8 visitor 模式 52 2.9 小结 53 第3章 创建型模式 54 3.1 abstract factory(抽象工厂)— 对象创建型模式 57 3.2 builder(生成器)—对象创建型 模式 63 3.3 factory method(工厂方法)— 对象创建型模式 70 3.4 prototype(原型)—对象创建型 模式 87 3.5 singleton(单件)—对象创建型 模式 84 3.6 创建型模式的讨论 89 第4章 结构型模式 91 4.1 adapter(适配器)—类对象结构型 模式 92 4.2 bridge(桥接)—对象结构型 模式 100 4.3 composite(组成)—对象结构型 模式 107 4.4 decorator(装饰)—对象结构型 模式 115 4.5 facade(外观)—对象结构型 模式 121 4.6 flyweight(享元)—对象结构型 模式 128 4.7 proxy(代理)—对象结构型 模式 137 4.8 结构型模式的讨论 144 4.8.1 adapter与bridge 144 4.8.2 composite、decorator与proxy 145 第5章 行为模式 147 5.1 chain of responsibil ity(职责链) —对象行为型模式 147 5.2 command(命令)—对象行为型 模式 154 5.3 interpreter(解释器)—类行为型 模式 162 5.4 iterator(迭代器)—对象行为型 模式 171 5.5 mediator(中介者)—对象行为型 模式 181 5.6 memento(备忘录)—对象行为型 模式 188 5.7 observer(观察者)—对象行为型 模式 194 5.8 state(状态)—对象行为型模式 201 5.9 strategy(策略)—对象行为型 模式 208 5.10 template method(模板方法) —类行为型模式 214 5.11 visitor(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 5.12.4 对发送者和接收者解耦 229 5.12.5 总结 231 第6章 结论 232 6.1 设计模式将带来什么 232 6.2 一套通用的设计词汇 232 6.3 写文档和学习的辅助手段 232 6.4 现有方法的一种补充 233 6.5 重构的目标 233 6.6 本简史 234 6.7 模式界 235 6.8 alexander 的模式语言 235 6.9 软件中的模式 236 6.10 邀请参与 237 6.11 临别感想 237 附录a 词汇表 238 附录b 图示符号指南 241 附录c 基本类 244 参考文献 249   前 言      本并不是一本介绍面向对象技术或设计,目前已有不少好介绍面向对象技术或设计。本假设你至少已经比较熟悉一种面向对象编程语言,并且有一定的面向对象设计经验。当我们提及“类型”和“多态”,或“接口”继承与“实现”继承的关系时,你应该对这些概念了然于胸,而不必迫不及待地翻阅手头的字典。      另外,这也不是一篇高级专题技术论文,而是一本关于设计模式,它描述了在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。设计模式捕获了随时间进化与发展的问题的求解方法,因此它们并不是人们从一开始就采用的设计方案。它们反映了不为人知的重新设计和重新编码的成果,而这些都来自软件开发者为了设计出灵活可复用软件而长时间进行的艰苦努力。设计模式捕获了这些解决方案,并用简洁易用的方式表达出来。      设计模式并不要求使用独特的语言特性,也不采用那些足以使你的朋友或老板大吃一惊的神奇的编程技巧。所有的模式均可以用标准的面向对象语言实现,这也许有时会比特殊的解法多费一些功夫,但是为了增加软件的灵活性和可复用性,多做些工作是值得的。      一旦你理解了设计模式并且有了一种“Aha!”(而不是“Huh?”)的应用经验和体验后,你将用一种非同寻常的方式思考面向对象设计。你将拥有一种深刻的洞察力,以帮助你设计出更加灵活的、模块化的、可复用的和易理解的软件—这也是你为何着迷于面向对象技术的源动力,不是吗?      当然还有一些提示和鼓励:第一次阅读此时你可能不会完全理解它,但不必着急,我们在起初编写这本时也没有完全理解它们!请记住,这不是一本读完一遍就可以束之高阁的。我们希望你在软件设计过程中反复参阅此,以获取设计灵感。      我们并不认为这组设计模式是完整的和一成不变的,它只是我们目前对设计的思考的记录。因此我们欢迎广大读者的批评与指正,无论从中采用的实例、参考,还是我们遗漏的已知应用,或应该包含的设计模式等方面。你可以通过Addison-Wesley写信给我们,或发送电子邮件到:design-patterns@cs.uiuc.edu。你还可以发送邮件“send design pattern source”到design-patterns-source@cs.uiuc.edu获取中的示例代码部分的源代码。      另外我们有一个专门的网页报道最新的消息与更新:      http://st-www.cs.uiuc.edu/users/patterns/DPBook/DPBook.html.      E.G. 于加州Mountain View    .  R.H. 于蒙特利尔      R.J. 于伊利诺Urbana      J.V. 于纽约 Hawthorne      1994年8月    序言    所有结构良好的面向对象软件体系结构中都包含了许多模式。实际上,当我评估一个面向对象系统的质量时,所使用的方法之一就是要判断系统的设计者是否强调了对象之间的公共协同关系。在系统开发阶段强调这种机制的优势在于,它能使所生成的系统体系结构更加精巧、简洁和易于理解,其程度远远超过了未使用模式的体系结构。    模式在构造复杂系统时的重要性早已在其他领域中被认可。特别地,Christopher Alexander和他的同事们可能最先将模式语言(pattern language)应用于城市建筑领域,他的思想和其他人的贡献已经根植于面向对象软件界。简而言之,软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。    在本中,Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides介绍了设计模式的原理,并且对这些设计模式进行了分类描述。因此,该做出了两个重要的贡献:首先,它展示了模式在建造复杂系统过程中所处的角色;其次,它为如何引用一组精心设计模式提供了一个实用方法,以帮助实际开发者针对特定应用问题使用适当的模式进行设计。    我曾荣幸地有机会与本的部分作者一同进行体系结构设计工作,从他们身上我学到了许多东西,并相信通过阅读该你同样也会受益匪浅。    Rational 软件公司首席科学家 Grady Booch
名: 设计模式复用面向对象软件基础 英文原名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 号: 7-111-07575-7 页码: 254 定价: ¥35.00 会员价: ¥31.50 币值: 315 出版日期: 2000-9-1 本设计实例从面向对象设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下有特别有用。 -------- 目 录 序言 前言 读者指南 第1章 引言 1 1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象接口 9 1.6.4 描述对象的实现 10 1.6.5 运用复用机制 13 1.6.6 关联运行时刻和编译时刻的 结构 15 1.6.7 设计应支持变化 16 1.7 怎样选择设计模式 19 1.8 怎样使用设计模式 20 第2章 实例研究:设计一个文档编 辑器 22 2.1 设计问题 23 2.2 文档结构 23 2.2.1 递归组合 24 2.2.2 图元 25 2.2.3 组合模式 27 2.3 格式化 27 2.3.1 封装格式化算法 27 2.3.2 Compositor和Composition 27 2.3.3 策略模式 29 2.4 修饰用户界面 29 2.4.1 透明围栏 29 2.4.2 Monoglyph 30 2.4.3 Decorator 模式 32 2.5 支持多种视感标准 32 2.5.1 对象创建的抽象 32 2.5.2 工厂类和产品类 33 2.5.3 Abstract Factory模式 35 2.6 支持多种窗口系统 35 2.6.1 我们是否可以使用Abstract Factory 模式 35 2.6.2 封装实现依赖关系 35 2.6.3 Window和WindowImp 37 2.6.4 Bridge 模式 40 2.7 用户操作 40 2.7.1 封装一个请求 41 2.7.2 Command 类及其子类 41 2.7.3 撤消和重做 42 2.7.4 命令历史记录 42 2.7.5 Command 模式 44 2.8 拼写检查和断字处理 44 2.8.1 访问分散的信息 44 2.8.2 封装访问和遍历 45 2.8.3 Iterator类及其子类 46 2.8.4 Iterator模式 48 2.8.5 遍历和遍历过程中的动作 48 2.8.6 封装分析 48 2.8.7 Visitor 类及其子类 51 2.8.8 Visitor 模式 52 2.9 小结 53 第3章 创建型模式 54 3.1 Abstract Factory(抽象工厂)— 对象创建型模式 57 3.2 Builder(生成器)—对象创建型 模式 63 3.3 Factory Method(工厂方法)— 对象创建型模式 70 3.4 Prototype(原型)—对象创建型 模式 87 3.5 Singleton(单件)—对象创建型 模式 84 3.6 创建型模式的讨论 89 第4章 结构型模式 91 4.1 Adapter(适配器)—类对象结构型 模式 92 4.2 Bridge(桥接)—对象结构型 模式 100 4.3 Composite(组成)—对象结构型 模式 107 4.4 Decorator(装饰)—对象结构型 模式 115 4.5 FACADE(外观)—对象结构型 模式 121 4.6 Flyweight(享元)—对象结构型 模式 128 4.7 Proxy(代理)—对象结构型 模式 137 4.8 结构型模式的讨论 144 4.8.1 Adapter与Bridge 144 4.8.2 Composite、Decorator与Proxy 145 第5章 行为模式 147 5.1 CHAIN OF RESPONSIBIL ITY(职责链) —对象行为型模式 147 5.2 COMMAND(命令)—对象行为型 模式 154 5.3 INTERPRETER(解释器)—类行为型 模式 162 5.4 ITERATOR(迭代器)—对象行为型 模式 171 5.5 MEDIATOR(中介者)—对象行为型 模式 181 5.6 MEMENTO(备忘录)—对象行为型 模式 188 5.7 OBSERVER(观察者)—对象行为型 模式 194 5.8 STATE(状态)—对象行为型模式 201 5.9 STRATEGY(策略)—对象行为型 模式 208 5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 5.12.4 对发送者和接收者解耦 229 5.12.5 总结 231 第6章 结论 232 6.1 设计模式将带来什么 232 6.2 一套通用的设计词汇 232 6.3 写文档和学习的辅助手段 232 6.4 现有方法的一种补充 233 6.5 重构的目标 233 6.6 本简史 234 6.7 模式界 235 6.8 Alexander 的模式语言 235 6.9 软件中的模式 236 6.10 邀请参与 237 6.11 临别感想 237 附录A 词汇表 238 附录B 图示符号指南 241 附录C 基本类 244 参考文献 249
### 回答1: 设计模式是一种通过提供可复用的解决方案来解决面向对象软件开发中常见问题的方法。这些问题可能包括对象之间的通信、对象的创建和销毁、以及如何组织代码等。 设计模式能够提供一种标准化的方法来解决这些问题,使得开发人员可以更加高效地构建软件系统。设计模式提供了一种用于描述和交流解决方案的共同语言,使得不同开发人员之间可以更好地合作。 设计模式的另一个重要特点是其可复用性。一旦开发人员学会了某个设计模式,他们可以在不同的项目中重复使用该模式,从而节省开发时间和资源。这种可复用性使得设计模式成为面向对象软件开发的基础之一。 《设计模式复用面向对象软件基础》这本将深入介绍设计模式的原理、分类和具体实现。通过学习这本,读者可以掌握常见设计模式的应用方法,并了解如何根据具体问题选择最合适的设计模式。该还包含了大量的示例代码和实际案例,帮助读者更好地理解和应用设计模式。 总结来说,设计模式是一种解决面向对象软件开发中常见问题的方法,具有可复用性。《设计模式复用面向对象软件基础》这本通过系统地介绍设计模式的原理、分类和实现,在提高开发效率的同时,帮助读者建立起良好的面向对象软件开发思维方式。 ### 回答2: 设计模式是一种解决软件设计问题的经典方法,它提供了一些通用的解决方案和思想,可用于构建复用面向对象软件设计模式的目标是提高软件的可维护性、可扩展性和灵活性。 设计模式包括三种类型:创建型、结构型和行为型。创建型设计模式关注如何实例化对象,包括简单工厂、工厂方法、抽象工厂、建造者和原型。结构型设计模式关注对象之间的组合,包括适配器、装饰器、代理、组合、外观、享元和桥接。行为型设计模式关注对象之间的通信和职责分配,包括观察者、模板方法、策略、状态、责任链、命令、备忘录、迭代器和访问者。 设计模式可提供可复用的解决方案,不仅可以提高软件的开发效率,还能确保软件的可靠性和可维护性。通过使用设计模式,开发人员可以更加清晰地理解软件系统的结构和功能,使得软件系统更易于理解和维护。同时,设计模式还能促进团队之间的协作和交流,提高团队的开发效率。 《设计模式复用面向对象软件基础》这本提供了系统和详细的介绍和讲解了各种设计模式的原理、实现方法以及应用场景。通过阅读这本,读者可以深入理解设计模式的核心概念,学习如何在实际项目中应用设计模式,提高软件的质量和可维护性。这本对于想要深入学习和应用设计模式软件开发人员来说是一本非常有价值的参考资料。 ### 回答3: 设计模式指的是用于解决软件设计中常见问题的经验性解决方案。它们是软件开发人员在解决类似问题时所提炼出来的最佳实践。设计模式的目标是提高软件的可复用性、可扩展性和可维护性。 设计模式是通过将常见的设计问题和对应的解决方案进行抽象和总结而得到的。它们是由经验丰富的软件开发人员们共同提炼和归纳出来的,是他们在实际项目中不断探索和总结出来的经验。 设计模式是可复用的,因为它们提供了一种标准化的解决方案,可以在不同的项目中重复使用。这样可以减少开发人员的工作量,提高开发效率。 同时,设计模式也能够提升软件的可扩展性,使得软件在面对变化时更加容易进行修改和扩展。通过使用设计模式软件的各个组件之间的耦合性得到了降低,使得系统更加灵活和易于维护。 最后,设计模式使得软件更易于维护。因为设计模式遵循了一系列约定和规范,开发人员能够更快地理解和修改代码,从而降低了维护成本。 设计模式复用面向对象软件基础,是因为它们提供了一套可复用的解决方案,能够解决软件设计中常见的问题。通过学习和应用设计模式,可以提高软件的质量和开发效率,同时也可以提升开发人员的设计能力和职业素养。在软件开发领域中,设计模式是不可或缺的一部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值