相关推荐
-
设计模式:可复用面向对象软件的基础--详细书签版
基本信息 原书名: 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) ——可复用面向对象软件的基础
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每...
-
24种设计模式
24种设计模式 文章目录设计原则单例模式工厂模式策略模式门面模式调停者模式责任链模式装饰者模式观察者模式组合模式享元模式静态代理动态代理迭代器模式访问者模式构建者模式适配器模式桥接模式命令模式原型模式模板方法状态模式谈到的一些问题 设计原则 返回目录 单一职责原则 一个类别太大,负责单一的职责 高内聚,低耦合 里氏替换原则 所有使用父类的地方,必须能够透明的使用子类。比如子类重写父类的A()方法之后,又重载了很多的A()方法,那么这样子会照成对父类接口方法的歧义 例:List list = n.
-
怎样在软件设计中选择使用GOF设计模式
在软件设计中选择使用GOF设计模式需要综合考虑需求、问题域、模式的适用场景以及模式的优缺点。通过理解设计模式的核心思想,并结合具体的示例进行实践,可以有效地提高软件的可维护性、可扩展性和代码复用性。理解设计模式的设计意图、类之间的关联关系,以及重新设计的原因是非常重要的。通过这些要点,可以更有针对性地选择合适的模式,解决系统设计中的具体问题,提高代码的可维护性、可扩展性和灵活性。
-
设计模式--可复用面向对象软件的基础(第一章 引言)
第一章 引言一、什么是设计模式二、SmalltalkMVCSmalltalk MVCSmalltalkMVC中的设计模式三、描述设计模式四、设计模式的编目五、组织编目六、设计模式怎样解决设计问题七、怎样选择设计模式八、怎样使用设计模式 一、什么是设计模式 一般而言,一个模式有四个基本要素: 1、模式名 一个助记名,它用一两个词来描述模式的问题、解决方案和效果; 2、问题 描述了应该在何时使用模式,它解释了设计问题和问题存在的前因后果; 3、解决方案 描述了设计的组成成分、它们之间的相互关系及各自的职责和协作
-
设计模式:可复用面向对象软件的基础_设计模式系列 面向对象基础知识
拉勾IT课小编为大家分解1、抽象:一种思维方式,把具体事物的简单化,概括性描述。2、UML:通用建模语言1、对象和类1.1对象在面向对象的世界里,万物皆是对象,动物是对象,植物是对象,对象的本质是什么呢?对象是一个真实存在的事物。比如一个杯子,一碗水都是对象。用对象的方式描述事物,与面向过程方式来讲,更容易理解,更符合人们的思维习惯。1.2类类是对象的抽象,比如一只小狗,一只小猫,他们的抽象是动物...
-
设计模式 可复用面向对象软件的基础_资深开发进阶软件架构必备技能UML
作为一个老资深开发程序猿,目前面对的现实的社会挑战摆在面前,就是不断学习不断进步,为啥呢?原因有三:知识更新迭代太快;后起之秀太优秀;自己年龄大了。废话不多说了,准备日更技术专题,把知识重新梳理一下。今天梳理软件开发知识筹备知识。下面展开对工作和行业的理解。一、工作:1、工作是做开发人员 OR 研发人员?主要是使用成熟的框架去开发应用功能,还是使用JavaEE、JVM、并发编程、NIO/...
-
《设计模式:可复用面向对象软件的基础(典藏版)》
《设计模式:可复用面向对象软件的基础(典藏版)》 埃里克·伽玛 180个笔记 1.2 Smalltalk MVC中的设计模式MVC通过建立一个“订购/通知”协议来分离视图和模型。MVC的主要关系还是由Observer、Composite和Strategy三个设计模式给出的。 1.4 设计模式的编目Abstract Factory(3.1):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们...
-
设计模式 可复用面向对象软件的基础_谈谈面向对象
何为面向对象编程面向对象编程简介面向对象编程(Object-oriented Programming,缩写:OOP)是软件工程中一种具有对象概念的编程范式(Programming Paradigm),同时也是一种程序开发的抽象方针,与之对应的编程范式还有:函数式编程(Functional Programming)、过程式编程(Procedural Programming)、响应式编程(Reacti...
-
好书系列之-设计模式:可复用面向对象软件的基础 1
第1章引言设计面向对象软件比较困难,而设计可复用的面向对象软件就更加困难。你必须找到相关的对象,以适当的粒度将它们归类,再定义类的接口和继承层次,建立对象之间的基本关系。你的设计应该对手头的问题有针对性,同时对将来的问题和需求也要有足够的通用性。你也希望避免重复设计或尽可能少做重复设计。有经验的面向对象设计者会告诉你,要一下子就得到复用性和灵活性好的设计,即使不是不可能的至少也是非常困难的。一个设
-
设计模式系列(一)
物是人非事事休,当周围的一切都发生着改变,包括我们的需求、程序等,我们又该如何去应对和解决呢?欢迎进入编程人员必经之路------设计模式1 本篇概述什么是设计模式为什么要学习设计模式怎么使用设计模式21种设计模式设计模式的遵循的六大原则设计模式之工厂模式.NET CORE微信扫一扫|关注我们QQ学习交流群|52381920微信公众号|dotNET学习天地2 什么是设计模式2.1 ...
-
设计模式-可复用面向对象软件的基础
1、什么是设计模式? 每一个模式描述了一个在我们周围不断重复发生的事情,以及该问题的解决方案的核心。 一般而言,一个模式有四个基本要素: 模式名称 — 一个助记名,它用一两次来描述模式的问题、解决方案和效果。 问题 — 描述了应该在何时使用模式。解释了设计问题和问题存在的前因后果。 解决方案 — 描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。 效果...
-
C++ 设计模式(可复用面向对象软件的基础)学习笔记——第一讲 设计模式简介
对于设计模式初学者来说,GoF的这本设计模式(可复用面向对象软件的基础)是有些难理解的,因此我先看了视频教程,附上教程链接网址https://www.bilibili.com/video/av52251106/?p=1。 以下是我的学习笔记整理,分享给有需要的朋友,记录的比较简单,如有不理解的地方可以看原教程视频链接,或者留言给我,本小菜和你一起探讨。 1.分解,...
-
面向对象可复用技术:类库、框架与设计模式
可复用技术 自从软件开发成为一项严谨的职业以来,程序员们都在寻找轻松工作编写完美代码的方法。可惜的是,Brooks博士在他的名著《人月神话》中,就论述了软件本身所具有的复杂性,这个世界上没有能够一劳永逸的银弹。 但现实却是,我们的工作和生活需要越来越多的软件来支撑。所以为了减少软件开发的工作量,降低系统隐藏的bug量,有许多理论被提出以解决这一问题。 可复用技术可以说是非常直观的想法,这来源于人们在其他工程领域的经验。例如在制造业、建筑工程中,大量的基础部件都是标准的通用件。 那么软件是不是也可以由一组标准
-
设计模式:可复用面向对象软件的基础.zip
软件工程之 设计模式 教程:可复用面向对象软件的基础
-
《设计模式:可复用面向对象软件的基础》——创建型模式(2)(笔记)
《设计模式:可复用面向对象软件的基础》 原型、单例
-
面向可复用性和可维护性的设计模式 课程学习总结
适配器模式会引入额外的类和代码,这可能会增加系统的复杂性。如上图所示,为了实现Shape的display方法,对先前已存在的类—LegacyRectangle中的diaplay方法进行了重用。:基类中定义的算法骨架是固定的,子类只能修改其中的部分步骤。的操作**:通过添加新的访问者类,可以在不修改对象结构的情况下定义新的操作。:当client不知道要创建哪个具体类的实例,或者不想在client代码中指明要具体创建的实例时,用工厂方法。中的pay方法时,可以根据需要传入算法策略的类型,从而实现不同的操作。
-
设计模式-可复用面向对象软件的基础(第一章 引言)-阅读笔记
模式的四个基本要素: 1. 模式名称 描述模式的问题、解决方案、效果 2. 问题 何时使用 3. 解决方案 描述组成成分,包括它们之间的相互关系、职责和协作方式 4. 效果 描述应用的效果和应该权衡的问题