具体描述
本书结合设计实例从面向对象的设计中精选出23个设计模式, 总结了面向对象设计中*有价值的经验, 并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好、 表达清楚的软件设计模式, 这些模式在实用环境下特别有用。 本书适合大学计算机专业的学生、研究生及相关人员参考。
作者简介
四位作者均是国际公认的面向对象软件领域的专家。
Erich Gamma博士是瑞士苏黎士国际面向对象技术软件中心的技术主管。
Richard Helm博士是澳大利亚悉尼IBM顾问集团公司面向对象技术公司的成员。
Ralph Johnson博士是Urbana-Champaign伊利诺大学计算机科学系成员。
John Vlissides博士是位于纽约Hawthorne的IBN托马斯J.沃森研究中心的研究人员。
目录信息
赞誉
序言
前言
读者指南
第1章引言┊1
1.1 什么是设计模式┊3
1.2 Smalltalk MVC中的设计模式┊4
1.3 描述设计模式┊6
1.4 设计模式的编目┊7
1.5 组织编目┊8
1.6 设计模式怎样解决设计问题┊10
1.6.1 寻找合适的对象┊10
1.6.2 决定对象的粒度┊11
1.6.3 指定对象接口┊11
1.6.4 描述对象的实现┊12
1.6.5 运用复用机制┊15
1.6.6 关联运行时和编译时的结构┊18
1.6.7 设计应支持变化┊19
1.7 怎样选择设计模式┊22
1.8 怎样使用设计模式┊24
第2章实例研究:设计一个文档编辑器┊25
2.1 设计问题┊27
2.2 文档结构┊27
2.2.1 递归组合┊28
2.2.2 图元┊29
2.2.3 组合模式┊31
2.3 格式化┊31
2.3.1 封装格式化算法┊31
2.3.2 Compositor和Composition┊32
2.3.3 策略模式┊33
2.4 修饰用户界面┊34
2.4.1 透明围栏┊34
2.4.2 Monoglyph┊35
2.4.3 Decorator模式┊36
2.5 支持多种视感标准┊37
2.5.1 对象创建的抽象┊37
2.5.2 工厂类和产品类┊38
2.5.3 Abstract Factory 模式┊40
2.6 支持多种窗口系统┊40
2.6.1 是否可以使用Abstract Factory模式┊40
2.6.2 封装实现依赖关系┊41
2.6.3 Window和WindowImp┊43
2.6.4 Bridge模式┊46
2.7 用户操作┊46
2.7.1 封装一个请求┊47
2.7.2 Command类及其子类┊47
2.7.3 撤销和重做┊48
2.7.4 命令历史记录┊49
2.7.5 Command模式┊50
2.8 拼写检查和断字处理┊50
2.8.1 访问分散的信息┊51
2.8.2 封装访问和遍历┊51
2.8.3 Iterator类及其子类┊52
2.8.4 Iterator模式┊55
2.8.5 遍历和遍历过程中的动作┊55
2.8.6 封装分析┊56
2.8.7 Visitor类及其子类┊59
2.8.8 Visitor模式┊60
2.9 小结┊60
第3章创建型模式┊62
3.1 Abstract Factory(抽象工厂)—对象创建型模式┊66
3.2 Builder(生成器)—对象创建型模式┊74
3.3 Factory Method(工厂方法)—对象创建型模式┊81
3.4 Prototype(原型)—对象创建型模式┊89
3.5 Singleton(单件)—对象创建型模式┊96
3.6 创建型模式的讨论┊102
第4章结构型模式┊104
4.1 Adapter(适配器)—类对象结构型模式┊106
4.2 Bridge(桥接)—对象结构型模式┊115
4.3 Composite(组合)—对象结构型模式┊123
4.4 Decorator(装饰)—对象结构型模式┊132
4.5 Facade(外观)—对象结构型模式┊┊139
4.6 Flyweight(享元)—对象结构型模式┊146
4.7 Proxy(代理)—对象结构型模式┊155
4.8 结构型模式的讨论 ┊164
4.8.1 Adapter与Bridge┊164
4.8.2 Composite、Decorator与Proxy┊164
第5章行为型模式┊166
5.1 Chain of Responsibility(职责链)—对象行为型模式┊167
5.2 Command(命令)—对象行为型模式┊175
5.3 Interpreter(解释器)—类行为型模式┊183
5.4 Iterator(迭代器)—对象行为型模式┊193
5.5 Mediator(中介者)—对象行为型模式┊205
5.6 Memento(备忘录)—对象行为型模式┊212
5.7 Observer(观察者)—对象行为型模式┊219
5.8 State(状态)—对象行为型模式┊227
5.9 Strategy(策略)—对象行为型模式┊234
5.10 Template Method(模板方法)— 类行为型模式┊242
5.11 Visitor(访问者)—对象行为型 模式┊246
5.12 行为型模式的讨论┊256
5.12.1 封装变化┊256
5.12.2 对象作为参数┊257
5.12.3 通信应该被封装还是被分布┊257
5.12.4 对发送者和接收者解耦┊258
5.12.5 总结┊260
第6章结论┊261
6.1 设计模式将带来什么┊262
6.1.1 一套通用的设计词汇┊262
6.1.2 书写文档和学习的辅助手段┊263
6.1.3 现有方法的一种补充┊263
6.1.4 重构的目标┊264
6.2 本书简史┊265
6.3 模式界┊266
6.3.1 Alexander的模式语言┊266
6.3.2 软件中的模式┊267
6.4 邀请参与┊267
6.5 临别感想┊268
附录A词汇表┊269
附录B图示符号指南┊273
附录 C基本类┊277
参考文献┊284
· · · · · · (收起)
读后感
1. 现在的计算机书已经厚到令人发指。比如这学期的《操作系统》教材,厚度堪比辞海。 2. 学术论文也一样。一个人写自己在巨人肩膀上看到的风景,一定要从自己爬巨人时看到的腿毛开始描写。 3. 这本书254页,可是取其精华远多于那些学术垃圾。 4. 因为考试原因,两天看完,酣...
书绝对是好书,但是译者的翻译给理解本书的原本含义造成了巨大的障碍,对翻译的理解的障碍甚至大于对于设计模式本身理解的障碍。 要读就读原版,否则可能越看越不懂。看不懂得时候,不一定是自己的智商低,多想想别人的智商。 没有10万行代码勿读,少儿不宜。
第一次看,看了40页,实在枯燥,看不下去了。 第二次看,是一年后,期间做了个项目,项目十分糟糕,偶尔又翻了这本书,感觉实在不错。这次总算看了大概。 第三次看,又是一年后,这次当参考书来了,呵呵呵 我的建议,一定要有不成功的开发、维护经历,这本书才能够让你深入理...
TITLE: 设计模式——可复用面向对象软件的基础\ ENGLISH TITLE: Design Patterns, Elements of Reusable Object-Oriented Software\ AUTHOR: 软件界四人帮 (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides) 本书共讲了23个常用的设计模式。 创建型模式 1. ...
用户评价
说实话,光听书名就感觉一股浓郁的“学术沉淀感”扑面而来,它似乎在宣示自己是面向对象设计领域的一座里程碑。我猜想,内容上绝不会是浮光掠影的介绍,而是会用极其严谨的语言去剖析每个模式的“契约”——它的意图、它的参与者、以及它如何与其他模式进行协同作用。我特别好奇它在讨论“可复用性”时,是如何平衡过度设计与不足设计的微妙界限的。很多初学者容易陷入的误区就是,只要学会了模式,就恨不得在任何地方都套用一个,导致代码变得臃肿不堪。因此,如果这本书能够提供清晰的“反模式”案例,明确指出哪些场景下坚持简单结构比生搬硬套设计模式更为高效,那它的实践指导价值将大大提升。我设想的理想章节会是关于“模式的组合与演化”,探讨如何从基础的结构型模式出发,逐步构建出更复杂的架构模式,比如MVC或MVP,并说明这些架构模式本质上就是更高级的模式组合体。如果书中能提供一些跨语言的对比,比如Java、C#与现代的TypeScript在实现这些模式时的细微差别和惯用法差异,那就更显其广博了。
我脑海中浮现出的是一本需要反复研读、在IDE旁边随时翻阅的工具书。评价其优劣,很大程度上取决于其配套的实例代码的质量。好的代码示例应当是清晰、简洁且高度可运行的,能够让读者在五分钟内就能在自己的编辑器中编译并理解其运行机制。如果书中的例子只是粘贴的大段代码,缺乏足够的注释和解释流程图,那么它的学习曲线就会非常陡峭。我特别期待看到对“意图驱动”的强调,即每一个模式的引入都必须清晰地回答“我引入这个模式是为了解决哪个具体的设计困境?”而不是“我只是为了用一个设计模式”。此外,对于模式的“权衡取舍”环节,如果能用对比表格的形式呈现,例如,模板方法模式在简化流程上的优势与在继承层级过深时的劣势进行对比,配上明确的推荐使用场景,那将极大地提升读者的决策能力。这本书如果能做到详略得当,对初学者友好,同时又不失对资深工程师的启发性,那它无疑是成功的。
对于一本声称是“基础”的书籍而言,其深度和广度的拿捏至关重要。如果这本书仅仅停留在GoF(设计模式之父)的二十三种模式上打转,可能会显得有些保守了。我更希望它能触及更现代化的设计理念,例如在微服务架构下,传统的设计模式如何被Saga、Circuit Breaker等更偏向于分布式和容错性的模式所补充或取代。面向对象本身也在不断演进,函数式编程的思潮也对传统类的封装提出了挑战。因此,这本书如果能将经典的设计模式置于一个更广阔的软件设计范畴内进行审视,比如讨论如何用“组合优于继承”的思想来优化工厂模式的实现,或者如何利用不可变性来简化状态管理中的观察者模式,那才真正体现了其“基础”的地位——即奠定理解未来变化的基础。我期望它不仅是历史回顾,更是对未来软件形态的一种预判。对于软件开发者而言,工具和技术日新月异,但那些经过时间检验的结构智慧才是真正的财富,这本书似乎正指向这个核心。
这本关于设计模式的书籍,虽然我没有直接阅读,但从其命名来看,它无疑触及了软件工程的核心命脉。我设想它会像一本精妙的建筑图纸集,详尽地描绘出那些被反复验证、证明稳固且灵活的结构蓝图。我期待书中不仅仅是罗列那些耳熟能详的模式——比如工厂、单例、观察者——而是深入挖掘它们背后的哲学思想。毕竟,模式的价值不在于记住名字,而在于理解“为什么”要用这种结构来解决特定场景下的耦合与扩展性难题。一个优秀的作者应该能够将抽象的“面向对象”原则,通过生动的代码示例和实际的业务场景进行具象化。我希望看到的是,如何通过应用策略模式来优雅地应对需求频繁变更的支付接口,或者如何运用装饰器模式在不侵犯核心代码的前提下动态地增加日志或权限校验功能。如果书中能用类似“设计决策树”的方式来引导读者,说明在面对A、B、C三种困境时,哪种模式是最佳的权衡点,那它就超越了单纯的工具手册,升华为一种思维训练。那种能让你在看到一个复杂系统时,瞬间就能洞察其内部结构,并预判未来维护难点的能力,才是阅读此类书籍的真正收获。这本书如果做到了,那它就称得上是软件架构师的必备案头书了。
这本书的标题,特别是“可复用面向对象软件的基础”这部分,暗示了一种对软件工程美学的追求。它不是教你如何快速写出能跑的代码,而是教你如何写出经得起时间考验、易于他人理解和维护的优雅代码。这已经超越了单纯的技术层面,触及了软件工程伦理的高度。我推测它在介绍结构型模式(如适配器、桥接)时,会着重强调“隔离变化层”的重要性,这是面向对象设计的核心价值之一。同时,行为型模式(如解释器、访问者)的处理方式也考验着作者的功力,因为这些模式往往最为抽象和复杂。如果作者能用一种循序渐进、由浅入深的方式,将这些复杂的行为模式拆解成易于理解的小块,并辅以现实世界中与之对应的行为比喻,那么这本书就能真正发挥其“基础”的奠基作用。它应该能让读者在面对新的编程语言特性或新的范式冲击时,依然能凭借这些底层的设计智慧找到解决问题的锚点。