1987 年,SmallTalk社区的Ward Cunningham 和Kent Beck发表了一篇文章《Using Pattern Languages for Object-Oriented Programs》这标志着建筑大师的思想落户软件开发领域。
设计模式的起源是建筑师Christopher Alexander 的研究,不同时代建筑师留下的伟大建筑作品中,有很多重复出现的设计,于是,他找到了一种结构化、可重用的方法来捕捉并描述这些重复的设计, 还给这些描述的结果起了一个名字叫模式(Pattern)。
“每一个模式描述了一个在人们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能不断地使用该方案而不必做重复劳动。”软件开发者最讨厌的东西也许就是重复,于是软件开发者很容易接受了这个思想。这里说一点题外话,中国的建筑史从来不以复用为目标的,中国至今没有一本像样的古代建筑史,是因为建筑师往往要突破旧例,而这些知识却往往是独占的。所以样式雷家族的建筑图谱遗失之后,故宫的建筑能拆开但是装不上去。
建筑大师用四个重要部分来描述一个模式:
-
名称:就像页面元素的ID一样,提到它的时候没有歧义就够了。但是有的名字太受欢迎了,哪里都有:比如工厂模式
- 问题:也就是模式的适用场景
-
解决方案:从规约层面来看设计的各部分的责任和关系
-
效果:好多书上这里都用“后果”,这个词略带贬义,我使用了“效果”。
这种描述方式也被借鉴到了软件开发领域,我们现在看到的设计模式的描述中,也都按照这样的格式来刻画某一个设计模式的关键特征。我们知道对于具体事物的描述大体上可分为两种。一种是对事物的属性进行度量,属于定量的表示方法。另一种则是对事务所包含的成分进行分析,称为定性的描述或结构性描述。显然这种方式还是定性分析。
这里就有一个有趣的问题了,设计模式的定义是定性的。让机器辨别事物的最基本方法是计算,原则上讲是对计算机要分析的事物与作为标准的称之为“模板”的相似程度进行计算。所以现在很多人研究设计模式自动选择时,第一件事情就是把设计模式进行量化描述。而在这种研究没有成功之前,分析、描述、判断还是人的强项,设计模式也体现了一个开发人员的价值。
1995年,Erich Gamma、Richard Helm、Ralph Johnson 和John Vlissides发表了著名的《Design Patterns:Elements of Reusable Object-Oriented Software》,这本书成为了设计模式的经典之作,这四位也被称为GOF.
设计模式复用的是面向对象设计知识和经验,它是用模板描述的,在设计阶段广泛使用。设计模式的关注者主要是设计师 开发人员。面向对象技术的日益成熟使其可操作性很强,通过学习面向对象的设计原则和设计模式的描述模板开发人员可以逐渐将设计模式应用到自己的设计过程中。
1996 年,Michael Akroyd 发表了“AntiPatterns:Vaccinations against Object Misuse”的论文,提出了反模式(Anti Patterns)的概念,反模式标识了导致软件质量低劣和项目失败的不好的设计概念、技术途径和开发实践,并提出了软件重组方案。现在我桌面上有《反模式:危机中软件、架构和项目的重构》,反模式方面的资料相对设计模式太少,这本200多页的小册子也成了反模式的经典。
设计模式的组织思路是集中以往的优秀软件的设计经验,它的思路可以简单的表达为:站在巨人的肩膀上。而反模式的思路则是:失败是成功之母。反模式复用的是软件开发失败的知识和经验,它适用的场景跨越整个软件开发过程。因而无论是开发者、设计师还是软件开发的管理者都可以从反模式中获益。基于对软件开发最常见惨痛教训的总结,这种实践特征也让反模式具有较强的可操作性。反模式的也是像设计模式一样用模板来描述,它会包含反模式名称、根源、以及重构方案等组成部分。
1996 年,Martin Fowler 的《Analysis Pattern:Reusable Object Models》一书提出了分析模式的概念。去年年底我翻译了Martin Fowler的一篇经典文章《新方法论》,随即发现这位大师在好多领域都是领先者比如Ioc,比如分析模式Analysis Pattern 经常在Martin Fowler的网站上转悠收获不少。
复用的最高境界是什么?是需求的复用。OOA中可复用的分析知识和经验是分析模式复用的内容。分析模式着眼于软件的分析和蓝图规划阶段,它不是从计算机系统的角度来看问题而是从领域工程的角度,反映的是业务过程的概念抽象而不是软件实现。所以分析模式是使用面向对象的思维方式来帮助领域专家,分析师来认识问题的,它是高度抽象的。高度抽象同时意味着它在实践中的可操作性比较差,曲高和寡,向来如此。
做为一个开发者,从最简单的代码复用开始,坚持不懈的学习设计模式,并借力设计模式将烟囱型的系统变成一个可扩展的健壮的系统。这个过程是漫长的,艰难的,要走好多的弯路,但是追求更好的设计是大部分开发者的共同点。
这个磨砺过程之后才有开发过程中的举重若轻,这让我想到黄庭坚的诗句:“桃李春风一杯酒,夜雨江南十年灯”,继续吧… ...
分享到:
相关推荐
### 设计模式:可复用面向对象软件的基础 #### 书籍概述 《设计模式:可复用面向对象软件的基础》是一本由Erich Gamma、Richard Helm等四位国际知名的软件工程师共同编写的经典之作,该书提供了面向对象软件设计中...
《设计模式:可复用面向对象软件的基础》是一本经典的软件工程著作,它详细阐述了在面向对象编程中,如何通过使用预定义的解决方案模板来解决常见问题,从而提高代码的可读性、可维护性和复用性。设计模式是经验丰富...
《设计模式:可复用面向对象软件的基础》是引导读者走出软件设计迷宫的指路明灯,凝聚了软件开发界几十年设计经验的结晶。四位顶尖的面向对象领域专家精心 选取了最具价值的设计实践,加以分类整理和命名,并用简洁而...
《设计模式:可复用面向对象软件的基础》一书介绍了23种经典的设计模式,这些模式大致可以分为三大类: 1. **创建型模式**:专注于对象的创建机制,确保系统在合适的时机创建正确的对象。 - **单例模式**...
设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决常见问题的最佳实践。这些模式经过时间的考验,被广泛应用于各种面向对象的软件开发中,以提高代码的可读性、可维护性和可复用性。本教程旨在深入讲解...
本书结合设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别...
本书结合设计实例从面向对象的设计中精选23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。
《分析模式:可复用的对象模型》是面向对象设计领域中的一部经典著作,由Martin Fowler撰写。本书深入探讨了如何在软件开发过程中利用分析模式来提高代码的可复用性和可维护性,从而降低系统复杂性。分析模式是经过...
在面向对象编程中,设计模式提供了一种标准化的方法来处理常见的设计问题,从而提高代码的可读性、可维护性和复用性。本书《设计模式可复用面向对象软件的基础(C++)》是针对这一主题的深度探讨,特别适合C++开发者...
书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价...
设计模式 - 可复用面向对象软件的基础 04
《设计模式:可复用面向对象软件的基础》是引导读者走出软件设计迷宫的指路明灯,凝聚了软件开发界几十年设计经验的结晶。四位面向对象领域专家精心选取了具价值的设计实践,加以分类整理和命名,并用简洁而易于重用...
- **第2章 实例研究:设计一个文档编辑器**:通过实际案例分析,展示了设计模式如何应用于具体场景中,解决实际设计问题。 - **第3章 创建型模式**:介绍了一系列用于创建对象的模式,如单例模式、工厂方法模式等,...
在《设计模式:可复用面向对象软件的基础》一书中,作者Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides(通常被称为GoF,Gang of Four)详细阐述了23种经典的设计模式。这些模式分为三类:创建型模式、...
书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 本书设计实例从面向对象的设计中...
标题《分析模式-可复用的对象模型》以及描述中提到的软件系统设计、责任模式、观察和测量模式、公司财务观察模式、库存与账务、使用财务模式、计划、交易、派生合同、交易包等,均指向了软件工程中的设计模式和面向...
《分析模式:可复用的对象模型》是一本深入探讨软件设计模式的重要著作,它由Erich Gamma和Richard Helm等著名软件工程专家共同撰写。这本书的中文版为中国的开发者提供了理解和应用这些模式的便利,使他们能够更好...
设计模式是面向对象编程领域中...通过阅读GoF的《设计模式:可复用面向对象软件的基础》等经典书籍,以及在项目中实践设计模式,可以提升开发人员对面向对象分析和设计(OOA/D)的理解,从而提高软件开发的效率和质量。
设计模式:可复用面向对象软件的基础 中文高清版。此书是一本必看的设计模式书籍,书中实例采用c++实现。