设计模式

当前位置:首页 > 计算机网络 > 软件工程/开发项目管理 > 设计模式

出版社:机械工业出版社
出版日期:2000-9
ISBN:9787111075752
作者:[美] Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides
页数:254页

作者简介

这本书结合设计实作例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。书中分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别有用。此书适合大学计算机专业的学生、研究生及相关人员参考。
书中涉及的设计模式并不描述新的或未经证实的设计,只收录了那些在不同系统中多次使用过的成功设计。

书籍目录

序言
前言
读者指南
第1章 引言
第2章 实例研究:设计一个文档编辑器
第3章 创建型模式
第4章 结构型模式
第5章 行为模式
第6章 结论
附录A 词汇表
附录B 图示符号指南
附录C 基本类
参考文献

编辑推荐

《设计模式:可复用面向对象软件基础》结合设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别有用。本书适合大学计算机专业的学生、研究生及相关人员参考。

前言

所有结构良好的面向对象软件体系结构中都包含了许多模式。实际上,当我评估一个面向对象系统的质量时,所使用的方法之一就是要判断系统的设计者是否强调了对象之间的公共协同关系。在系统开发阶段强调这种机制的优势在于,它能使所生成的系统体系结构更加精巧、简洁和易于理解,其程度远远超过了未使用模式的体系结构。 模式在构造复杂系统时的重要性早已在其他领域中被认可。特别地,Christopher Alexander和他的同事们可能最先将模式语言(pattern language)应用于城市建筑领域,他的思想和其他人的贡献已经根植于面向对象软件界。简而言之,软件领域中的设计模式为开发人员提供了一种使用……

内容概要

四位作者均是国际公认的面向对象软件领域的专家。
Erich Gamma博士是瑞士苏黎士国际面向对象技术软件中心的技术主管。
Richard Helm博士是澳大利亚悉尼IBM顾问集团公司面向对象技术公司的成员。
Ralph Johnson博士是Urbana-Champaign伊利诺大学计算机科学系成员。
John Vlissides博士是位于纽约Hawthorne的IBN托马斯J.沃森研究中心的研究人员。

媒体关注与评论

书评这本书的目的就是将面向对象软件的设计经验作为设计模式记录下来。每一个设计模式系统地命名、解释和评价了面向对象系统中一个重要的和重复出现的设计。我们的目标是将设计经验以人们能够有效利用的形式记录下来。鉴于此目的,我们编写了一些最重要的设计模式,并以编目分类的形式将它们展现出来。

图书封面


 设计模式下载 更多精彩书评



发布书评

 
 


精彩书评 (总计54条)

  •     铜弹二十五年前,弗瑞德.布鲁克斯“没有银弹”的论文让古老的迷信成为了现代软件工程领域家喻户晓的时髦比喻。八年之后,《人月神话》二十周年纪念版发行,他谈了对面向对象编程的看法。面向对象仍然是从次要复杂性(外在技术的复杂)去解决复用的问题,还没有从软件项目针对解决的问题本身的主要复杂性(内在业务逻辑的复杂)上去解决问题,当然,面向对象仍然是一颗有助于代码和算法级别复用的铜弹。人们似乎永远找不到银弹,因为之所以需要雇佣程序员,就是我们要解决问题。如果问题的业务逻辑本身就是复杂和全新的,就不太可能存在重用的万能方法来提高效率。四人帮但是我们仍然可以从相似问题的成功解决方案中归纳经验,设计模式的概念就是从实际设计问题的解决中涌现的。绰号四人帮(gang of four)用来戏称《设计模式:可复用面向对象软件的基础》一书的四位作者,同时方便将他们最初的圣经和其它的关于设计模式的书区别开来。《设计模式》一共总结出了23种成功的设计思路,按不同的标准进行了分类,以便比较、启发我们提出新的模式。设计模式的概念标志着开始有更多关注在主要问题的解决上而不仅仅停留在技术问题上。模式依据目的可分为创建型、结构型和行为型三种。创建型模式与对象的创建有关,结构型模式处理类和对象的组合,行为型模式对类或对象怎样交互和分配职责,通常涉及类方法。我将模式按照相关的主题进行分组,综合上述两种分法,可以得到一个如下的表格:| 创建型 | 结构型 |行为型组合 | Abstract Factory |Bridge |Visitor层次 | | Composite |Interpreter| | |Iterator| | |Chain of Responsibility集中 | Singleton | Flyweight | Mediator| |Facade | Command| | |Observer解耦 |Factory Method | Decorator | State| Prototype |Proxy |Strategy| Builder |Adapter |Template Method序列化 | | | Memento组合爆炸在设计模式时,第一个要考虑的问题是类的组合爆炸问题。当一个抽象有多个具体实现时,通常用继承来协调。但是,如果问题包含有多个层次的抽象,机械的使用单一的继承策略来对应所有的组合会产生大量难以维护的类。为了让代码易于修改扩充,应该将不同的抽象部分分离开来,分别继承,然后通过对象间的引用来组合。例如,在抽象工厂模式中,有两个方面的抽象问题,一个是工厂的抽象问题,不同的工厂在不同的情况下会采用不同的具体标准构造产品类,另一方面有产品类的抽象问题,不同的一系列产品需要一个产品抽象类来统一他们的构造、使用接口。整体上,每一个具体的工厂都会引用每一个不同的具体产品对象。在结构型模式中,桥接模式也通过分离两个不同的抽象来实现,两个抽象通过基类的公共接口间的桥接整合在一起。行为型模式中的访问者模式解决这样一个双分派问题:对于一个具体的方法,不仅跟接受访问的对象类型有关,还和访问者的类型有关。这些模式最终产生一个拓扑结构像矩形的二维组合,每个组合都对应一种具体的完整实现。层级设计类的层级结构应该尽量简单。树形拓扑结构是一种常用的数据结构,适用于复杂问题的分而治之。静态的继承来对应对象间的动态的树形关系并不灵活。组合模式将代表叶节点的类和容器的类继承于共同的构件类,统一两者的接口,容器类返过来引用其基类构件类。对象通过递归组合,灵活的构成一个树形的拓扑结构。运用对象间的引用而不是类的继承,可以减少所设计类的层次,同时增加灵活性。职责链模式将对象引用连成一条链,请求被依次传递,直到有某个对象的方法处理为止。对于层次复杂的聚合结构,使用迭代器模式能提供按一定顺序访问元素的方法,解耦程序的复杂性。另一与复杂层次有关联的模式是解释器模式,它用于定义并执行一个文法的解释。由于文法通常可以由较短的BNF表示且结构较为固定,因此,解释器的递归组合可以直接用继承来对应。集中某些模式体现出集中抽象的特点。在创建型模式中,单件模式可以保证类在实例化后只有一个全局集中的访问点。在结构型模式中,享元模式中少量类的享元对象被反复引用,大量的引用者集中于一个享元,外观模式则将子系统的一组接口集中于一个高层接口,使得这一子系统更加易于使用。在行为型模式中,多个对象之间的行动协调往往有一个指挥中枢,命令模式的中枢是命令类,观察者模式则是被观察类,中介者模式则是中介者。这些模式都是单分派机制的实现:对于一个具体的方法,只跟一个对象的类型有关。在中介者模式和命令模式中,具体方法由发送请求的对象类型决定,而观察者模式,则是由接受请求对象的类型决定。接口编程好的面向对象编程应当对接口编程,而不是对实现编程,这样做使得客户无须知道使用对象的类型或实现,只需用抽象类中定义的已知接口操纵对象,这将极大地减少子系统实现之间的相互依赖。构建型模式中的原型模式可以无须知道所创建对象类型,构建者模式利用接口指导复杂对象的构建,无须知道创建对象的具体实现,工厂模式定义一个创建对象的接口,将一个类的实例化延迟至子类。在结构型模式中,代理模式和装饰模式都将一部分的功能分离,委托内部实际实现或由外部的装饰器一步步的增加功能。适配器模式则将一个类的接口转换成客户希望的另一个接口,这对于复用已有的代码十分有用。在行为型模式中,模板方法模式定义一个操作中的算法的骨架,将一些步骤延迟到子类,方便修改算法的某个特定步骤。因此,它使用的是钩子操作,父类方法空缺,由子类实现,而不是抽象操作,子类调用父类的方法。策略模式和状态模式收集所需的全部上下文,然后通过基类接口,委托具体的策略类或状态类来实现实际的功能,用户可以方便的替换策略或状态的实现。观察者模式其实是一种回调机制,而备忘录模式现在常常被称为序列化。语言无关设计模式是从“设计思路”的角度研究编程,理论上是和语言无关的,但是实践中由于设计模式是从具体的案例总结而来的,因此在成文过程中不可避免的与特定的语言相关联。由于C++、Java,设计模式通常是在上述的语境下所讨论的。如果从今天的角度看,有些设计模式,与其说是发挥语言的特点,倒不如说是在克服语言设计本身的不足。多年来计算机硬件飞速发展,动态语言逐渐流行。动态语言的特性,使得不少设计模式得到许多精简。动态语言:一等公民在动态语言中,类型是一等公民,不需要再通过继承抽象类的方式预留公共接口,而且类的构建也是动态的,很多情况下不需要设计工厂类来构建,所以抽象工厂模式、享元模式、工厂方法、状态模式和指责链条模式这六种模式可以简化甚至不需要设计。同样,函数在动态语言中也是一等公民,命令模式实现更容易,另外策略模式、模板方法模式、访问者模式这四种模式都能简化。广义函数机制Lisp这种动态语言的对象系统,即CLOS标准不是基于消息机制,而是基于广义函数机制。定义一个抽象的广义函数后,通过特化滚广义函数类型参数来定义一个具体的方法。这意味着方法不是属于类,而是实际上属于广义函数。更关键的是,广义函数的参数数量没有限制,本质上是一种多分派机制,不仅不需要设计访问者模式来支持双分派,而且可以实现任意多的分派。多分派特性又被称为多重方法。构建者模式完全可以用多重方法来实现,因为构建函数的具体方法不仅与读入标记对象的内容有关,也和标记对象的类型,被构建对象的类型有关。方法组合当广义函数特化被调用时,它会自动将符合特化条件的方法收集起来,并且按照最特定的匹配优先或者指定的顺序来执行。这种特点提供了一种叫做标准方法组合的技巧。中介者模式、观察者模式这样本质上单分派的机制,可以用方法组合代替,比如在主方法的请求执行后,用after:的辅助方法响应执行。宏与元编程Lisp的宏定义具有“元编程”的特点。它可以在普通代码运行前的宏时间预先处理代码。这为编程语言提供了语法上的抽象,可以直接设计BNF范式对应的宏来代替解释器模式。Lisp正因为这个特点所以有众多方言。Mathematica没有宏,但是可以通过Hold和Release操作在代码运行之前,对其进行操作,或者用ToString/ToExpression的组合,将代码转化成字符串,用正则表达式处理之后在转化回表达式运算,可以代替宏的功能,实现元编程。动态语言往往有模块机制,这样我们可以建立统一的接口却不再需要设计外观模式,不需要要生成对象。多范式编程动态语言除了传统的指令式、递归式的编程范式外,还支持其它多范式编程。Mathematica支持函数式编程,基于lambda演算的函数式编程具有无副作用的特点。符号和方括号的组合可以看成是面向对象编程的部分支持。不过,Mathematica并不需要传统意义上的面向对象系统,因为动态语言不需要继承一个公共的接口,一切都是动态加载的,方法和符号的关系可以用“广义函数”的角度来看待。逻辑编程Mathematic支持逻辑编程,即基于规则的编程。在Mathematica中,每一个:=语句都会对符号对象生成对应的:->匹配规则,可以简单的利用Mathematica内置的许多数学规则进行:=语句定义,也可以直接对符号联系的所有:->匹配规则进行修改,自定义的方式来进行。
  •     学习C++的必看书之一。书的长度适中,可以在短时间看完,但很难在第一遍看懂。当你在做项目的时候,偶尔想想这本书的内容,你就会觉得收益颇多,回过头来再看第二遍,感觉就不一样了。当你需要用到某个具体模式的时候,回过头仔细再看某一章和相关的章节,你对设计模式的理解就又深入了一层。当你反复看了多遍后,只有一个感觉,那就是感叹这本书就是设计模式这个领域的Bible!
  •     买了本。扔柜子里了。看了几页。结论。一页顶一本书。以后看吧。现在先把菜鸟的基础弄扎实再说。不难。不过现在用不着。不是说内容不难,而是把难得的东西用很简单的语言描述出来了。经典就是经典。国内的书真的太烂了。至今没看到一本号称经典能比得上国外的经典的。

精彩短评 (总计101条)

  •     不适合初学者
  •     略难懂
  •     设计模式要融会贯通才可以, 作为基础只是介绍还是不错的
  •     学习设计模式的经典读物,正版推荐
  •     非常好的软件工程的书,介绍了标准23套经典模式,可是,例子分析不足.
  •     经典的书。非常值得看。
  •     为什么一门SE课会上成DP!
  •     书刚刚到,还没开始读
  •     如果英语能力够的话,建议直接读原版,否则必须找一本原版对照着读,译本本身有些地方翻译的较为晦涩,有些翻译的是不符合原版意思的。译本本身的翻译造成了这本书较为难懂。书中的内容是非常值得面向对象的开发人员研读的。这本书虽然比较薄,但是对各个模式的动机,适用性解释的是非常好的,是一本需要常备案头查阅的书籍,需要不断应用,方能体会其本质。不过对于各个模式的区别的讨论稍显不足。这对于初学者来说,应该是个难点,需要读者在阅读时不断的思考。
  •     大部头,虽然极度不建议错过,但书的结构很乱,基本相当于经验的罗列——当然,在那个年代也颇为实用就是了。好处就是,看一本很乱的书,有助于锻炼自己的思维,独立思考不是么?
  •     原书是好书,翻译的太烂。
  •     适合有一些经验的人看,如系统架构师这类型的。
  •     不管如何,都是影响了时代的巨著,可惜中文版有几处错别字和句义不顺,只能给4*了。
  •     书不错,是新的。
  •     这本书可是经典中的经典,超级喜欢,已经看过Head First 设计模式了,这本打算看一遍然后收藏起来
  •     模式源头的首要【参考书】!
  •     做技术的人必备的书,闲的时候翻翻
  •     讲了创建型模式、结构型模式、行为型模式,几个常见设计模式。有模式的介绍说明,实现,代码。在有一定开发经验,看这本书应该能让你对如何进行面向对象程序设计有更清晰更系统的理解。毕竟不是50元以上的大书,所以书有点薄,但对得起这个价格。
  •     学术到就是一份文档
  •     书还是不错的,尤其是tcp/ip路由技术
  •     这本书还需要评论吗,经典中的经典!
  •     最经典的,但是我是学java的,C++学的并不好
  •     经典之书依然经典。
  •     完美,当时看完只觉得震撼
  •     据说是设计模式的起源
  •     书必须是好书,当当不怎么给力,写22号送达,结果23号才到,要不是我打电话催估计23号都到不了,说什么无锡仓库爆仓,仓库爆仓关我什么事,客户只关心什么时候能收到。不够看在开学活动的份上,还是给满分吧。
  •     原著在1994年就出世了,20多年过去了,依旧是设计模式非常经典的著作。 随着编程语言的不断完善和功能越来越强大,虽然书中的有些设计模式在今天已经过时了,但是其设计思想却依旧值得我们去学习。 最后引用书中的一句话:“如果我们不研究软件中的设计模式,就无法对它们进行改进,就更难以提出新的设计模式”
  •     是本好书,理论多些,讲解的很细,美中不足的是术语翻译的有些混乱,需要反复揣摩才能明白作者的本意。翻译不见得就是全中文,术语不译也许更容易理解。object叫不叫做“对象”没关系,关键是让大家在脑海中形成它到它的含义的映射。
  •     C++模式学习必不可少的辅导书,绝对给力
  •     很经典的书,没法不说他的号
  •     经典设计书籍,前人思想的火花
  •     面向对象语言关键是建模,其次是语义网,一个工程的完备过程:了解问题领域。与用户交流,并确定他们的需求和目标。开发问题说明书。设计用户界面。 开发用例。拟出草案静态模型。在细化静态模型时开发动态模型。实现。 经济学,计算机学都是注重建模的学科,建模的本质又是估计(统计学就是研究热核的渐进关系),而统计学都是这两门学科的关键工具课程,统计学最擅长的是探测变量之间的关系。内行的设计者知道:不是解决任何问题都要从头做起。他们更愿意复用以前使用过的解 决方案。当找到一个好的解决方案,他们会一遍又一遍地使用。这些经验是他们成为内行的部分原因。
  •     设计模式经典之作
  •     好书 但还是得找一本java版本的
  •     已经购买了,要看的书和论文太多,好久没有看了,但是翻译的还不错,英文版的在mini上浏览了一遍了
  •     还是要多巩固啊。
  •     个人功力还不够深厚,理解的不够深刻
  •     有一本《Modern C++ Design》也不错,可惜绝版了,这本书是经典,当然结合项目理解可能更深刻
  •     经典的书,只是有点难看懂!
  •     如果大家也像我一样是"半路出家",自学的编程,强烈建议大家买这本书,否则就很难入行,仅仅停留在照着例子写程序的阶段,看了这本书,就快成内行了,嘿嘿.
  •     第一次读的时候觉得很有道理,等到过了几年,其实发现,模式这种东西快被用烂了。
  •     读过不下五遍,一遍一遍加深吧
  •     这本书得长时间的工作经历才能领悟到他的深处
  •     软件工程参考教材。很合适。
  •     这本书是老师推荐的!很好
  •     还没看完,不过很经典书
  •     经典不解释了
  •     只针对中文版:错别字多,语句不通,曲解原文含义
  •     手头参考,遇到问题了翻翻
  •     这本书是设计模式的总结和相对规范的表述,并不能教会读者使用设计模式~虽然它对OOP的重要性不言而喻。先刷个印象吧,在工作中遇到了至少知道模式是什么,结合项目来学习才是正道。
  •     同一个出版社这本书的纸质一般,买正版书主要就是考虑触摸的手感,不然看电子书就行了~~书很不错,慢慢看吧
  •     这本书很适合对面向对象的设计模式的理解,同时也能加深面向对象思想的理解。
  •     翻译不太容易懂,收获不大,真正的设计模式都应该从具体场景抽象
  •     软件设计很好的一本书,
  •     多次通读都有收获
  •     这书比较适合工作了一段时间的人看。
  •     经典书,慢慢看,这样才好
  •     这本书没话说,经典必看。不过还是不适合初学者,讲的非常精炼,没有废话,初学设计模式的人可以看看大话设计模式一类的比较浅的书。
  •     这本书比较经典 看起来还是比较费劲,需要多看看体会
  •     非常经典的一本书,虽然已经读了N本设计模式书籍,但读这本书的时候还是花了很多功夫,也有点吃力。总体来说收获也是非常大的。
  •     软件设计模式
  •     这本书太经典,恐怕这一点没必要我来说
  •     这是一本经典之作
    作为教材或者作为程序设计的入门,都很不错。
  •     很有用的书,正在看~~
  •     内容不错,很不错的书,好好阅读中
  •     书很不错,就是语言用的C++,看起来不习惯
  •     只想说经典。
  •     是学习面向对象软件的基础很有价值的
  •     这本书是本好书没错,同时它也是一本难理解的书,虽然只有薄薄的贰佰多页,但是里面的内容却是终身受益的。
  •     书真心不错,还是纸制的书好啊,看着舒服
  •     四人帮的书第一次看,里面写的非常详细~相对于入门,这是一本进阶的书。配合一本入门的书籍看更好~
  •     并不像很多人说的那样艰深晦涩 但和实际的开发结合起来还需要有更多自己的理解
  •     应该算是程序界的名著了吧,但是有很多地方因为太精简,反而不容易理解,最好配合一些其它相关资料一起学习!
  •     妈的。。。高级货。。。比我以前读的人和一本技术书都要高级。。不可能一下子,先看了创建型模式的的。现在工作中也用不了,要循序渐进。
  •     软件必看
  •     如果说大话设计模式可你带你快速的了解设计模式,那么这本书就更像是一个标准。你可以从中全面的了解设计模式,对你的C++开发会有更深层次的推进。它可以带你从架构上去推进你的项目。
  •     GOF的设计模式,无须再多评论,已经是每个OOD者的基本技能和参考手册
  •     可能是我的高度还远不及作者及译者的高度,所以大多章节都没能看懂此书。
  •     对于经典书籍,不继续讨论,因为它是经典书
  •     ZZW3 经典
  •     功力还不够,有机会还会再看一遍
  •     前几章第一次读的时候严重打击了积极性,后来第二次读又因为采用的语言原因,看得不是特别习惯,也影响了理解,后来到行为型的都习惯了,发现真好,说的真清楚,把各种应用和设计都介绍了,只是水平不到,还没有真正感受到大师的魅力。先存一下,以后再精读。
  •     一定要认真学习
  •     很有用但比较晦涩 翻译渣
  •     一部分例子是用smalltalk写的,不太好接受。不过就内容而言确实精粹。
  •     学校指定的教材,觉得还不错,机械工业出版社的书
  •     很多编程模式、思想,是专业人员经验的总结和积累
  •     感觉我已经学会OOP啦!
  •     翻译太过生硬
  •     Classic book.
  •     这本是一定要看的,模式就是经验的总结。经典的书
  •     大师写的23个经典模式,以前在图书馆看过一遍,经典的书,还是需要买一本,经常翻阅。
  •     介绍了一些常用的经典设计模式,主要采用C++语言描述举例,对C++语言不太熟悉的话会有点吃力,可以重复阅读
  •     太多好书被翻译毁了
  •     书都挺好的,还有书香,是新书!
  •     GoF 设计模式的启蒙书籍
  •     非常精简但完整的书 中阶时使用
  •     这本书比较好,讲述得很透彻,而且还能加深对C++中继承、虚函数等理解,感受其强大的威力。
  •     之前一直在看和关注这块的知识,不过由于认识和知识积累的原因,一直对这块理解不够。 经过一段时间的积累 再次看看这本书,肯定会有不同的任何和收获!
  •     书很好正式我想要的,就是包装有点磕碜
  •     一本读完如醍醐灌顶的书,经典的力量
 

农业基础科学,时尚,美术/书法,绘画,软件工程/开发项目管理,研究生/本专科,爱情/情感,动漫学堂PDF下载,。 PDF下载网 

PDF下载网 @ 2024