GoF设计模式三作者15年后再谈模式
Erich Gamma, Richard Helm, 和 Ralph Johnson在GoF设计模式发表15年以后,再谈模式,另外一位作者,也是四色原型的发明者Peter已经过世。
提问者:如今有85,000 iPhone的小应用遍布全球,使用PHP就能够写一个简单的"Hello, World! The time is X"Web网页,那么,面向对象设计是难的,这句话是否还正确呢?
Richard Helm: 软件设计总是很难的,尽管大多数现代开发环境已经降低了复杂性,通过重用库和工具(Eclipse, Apple, Microsoft), 设计一个解决业务问题的软件依然是难的。
Erich Gamma: 是的,iPhone非常有趣. The iPhone SDK 是基于NeXTStep面向对象框架 object-oriented frameworks,如AppKit. 但我们15年前写GoF设计模式时就已经存在,也是驱动力之一.我们实际上已经在书中提到框架的几个模式: Adapter, Bridge, Proxy, and Chain of Responsibility.
提问者:是否可以表明好设计能够延长软件生命,它能够在不同技术形态中延续生存呢?
Ralph Johnson: 今天有时写一行代码也许就可以,软件经过多年已经提高很多,许多系统过去需要仔细的设计,今天已经能够被重用,但是还是还有一些系统写100K代码并不比15年前容易。它能实现更多功能,但是耗费也是同样的。
软件设计是难的,这正使它变得有趣,善于软件设计的人会从解决难问题中得到乐趣:将混乱变得秩序,克服困难。过去是难的事情现在变得容易,但是我们今天面临的问题是15年前不可能面临的,OO编程有帮助,但是不能消除设计的困难。
提问:关于重用,在90年代作为OO的主要好处,但是过去几年,很多程序员离开重用,开始使用框架,对于重用的观点变得:你不可能需要它, 那么是否重用还是今天开发这的主要目标呢?
Richard: 我认为在复杂层次有一个进化,重用软件已经演变成在系统语言层次,以框架和工具形式出现,大部分工作留给框架设计专家来实现。
....
Erich: 实际上,我补充的是,最难的是可重用面向对象软件的演进使用,比如 factories, adapters 和facades模式能够改变和演进一个可重用的库.。
.....
Ralph: 大多数程序员都不是被聘请为编写一个可重用的软件,但是你必须知道一个可重用的软件是如何工作的,我们的模式是重用软件的通用方式,如今他们还是有用的。
Erich: 我同意,但我学习iPhone SDK时,我注意到这些库非常熟悉,因为他们是我熟悉的模式。
提问者: 曾经有一段时间,每件事都是模式,有模式架构,组织行为,分析等等,如今是否有23种模式的拓展,比如架构模式,是否有新的设计模式关系图?
Ralph: 如果你的意思是我们是否有,回答是没有,如果你意思是是否有人做了新图,回答是有。
....
提问者:在模式热潮中,有一种反模式anti-patterns,你们是怎么看的。反模式是模式吗?
Richard: 有可能,他们提供了一种方法,分享他们犯过的错误。
Ralph: 我愿意使用这样概念"代码味道code smells," or "设计味道design smells"/"架构味道architecture smells"等等,他们并不总是错误. 有时他们实际就是你必须面临的问题, 比如"stove pipe"系统出现,部分是因为公司软件之间并没有一个好的互联通讯方式。 部分因为技术变化太快,部分因为公司之间不同架构,z增长快的公司收购了其他公司也造成,所以,并不是架构领导力的强度能够消除这个问题的
我的一些学生写了一个模式叫大泥球"Big Ball of Mud." 大部分知道这个模式的人知道它是一个反模式,但是一些IT组织的人,至少我看到过的,并不做得更好。
...
提问者:如今一些听到一些面向functional或dynamic语言者宣称他们的语言不需要模式,你们如何反应?
Erich: 需要注意的是,但我们写设计模式时,还没有Java和C#
Ralph: 这些语言不需要模式,是因为这些语言提供了一种解决问题的方式,我们的模式是对于语言C++ 和 Smalltalk,包括今天的大部分叫OO的语言, 当然不适合所有语言,我并不认为使用其他语言就不需要模式,只不过他们使用另外一种其实等同于模式的概念。
Erich: 设计模式最终融入任何语言. 尽管这些经验并不总是表达为模式,但是他们存在,Erlang的设计原理就是这样。
提问者:: 有关于dynamic 和面向功能functional语言的模式吗?
Ralph: 如果动态语言如Smalltalk, Ruby or Python, 那么我们的模式依然有效,. Functional性语言需要不同的模式,但是目前我不知道有谁发布。
提问者: OOP 提供一个静态和动态结构的结合,允许设计意图能在在不同流程中传达,今天强调面向功能和元编程, 有"domain-specific language" 或 "fluid interface流体接口" 这些概念和模式有什么区别和联系?
Richard: 是一种补充. 使用好设计的丰富的类图结构,可以获得DSL的特性和功能,库构成DSL的名词和动词。
Erich: 有的是补充设计模式,元编程能够替代设计模式, 例如JUnit 3 到JUnit 4演变是一个例子, JUnit 3 是一个使用Composite, Template Method 和Command等模式小框架. JUnit 4 导入Annotations meta-programming . 以前的模式使用就消失了,演变成一系列小的元注解。
....
其他不是非常重要的可见原文:Erich Gamma, Richard Helm, and Ralph Johnson talk to Larry O'Brien about Design Patterns, 15 years later.
GoF设计模式三作者15年后再谈模式的更多相关文章
- 8.4 GOF设计模式三: 外观模式 Facade
GOF设计模式三: 外观模式 Facade “现有系统”功能强大.复杂,开发“新系统”需要用到其中一部分,但又要增加一部 分新功能,该怎么办?4.1 Facade Pattern: Key Fea ...
- Java虚拟机15:再谈四种引用状态
JVM的四种引用状态 在Java虚拟机5:Java垃圾回收(GC)机制详解一文中,有简单提到过JVM的四种引用状态,当时只是简单学习,知道有这么一个概念,对四种引用状态理解不深.这两天重看虚拟机这部分 ...
- C++ Primer第四版 15.9 再谈文本查询 程序实现
编程过程中发现书本中的示例程序并不完全,某些地方存在错误,现已改正并添加少许注释.. 1 #include<iostream> 2 #include<fstream> #inc ...
- 002-创建型-00-简单工厂【非23种GOF设计模式】
一.概述 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一. 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实 ...
- 漫谈 GOF 设计模式在 Spring 框架中的实现
原文地址:梁桂钊的博客 博客地址:http://blog.720ui.com 欢迎关注公众号:「服务端思维」.一群同频者,一起成长,一起精进,打破认知的局限性. 漫谈 GOF 设计模式在 Spring ...
- 【转】 Pro Android学习笔记(四三):Fragment(8):再谈Transaction和管理器
目录(?)[-] Transaction的一些操作 再谈FragmentManager 调用其他fragment的方法 唤起activity 唤起fragment和相互通信 一些其它 Transact ...
- [转载]再谈百度:KPI、无人机,以及一个必须给父母看的案例
[转载]再谈百度:KPI.无人机,以及一个必须给父母看的案例 发表于 2016-03-15 | 0 Comments | 阅读次数 33 原文: 再谈百度:KPI.无人机,以及一个必须 ...
- Java设计模式(十三) 别人再问你设计模式,叫他看这篇文章
原创文章,转载请务注明出处 OOP三大基本特性 封装 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的属性和方法只让可信的类操作,对不可信的进行信息隐藏. 继承 继承是指这样一种能力,它可以使 ...
- OOAD-设计模式(二)之GRASP模式与GOF设计模式概述
一.GRASP模式(通用责任分配软件模式)概述 1.1.理解责任 1)什么是责任 责任是类间的一种合约或义务,也可以理解成一个业务功能,包括行为.数据.对象的创建等 知道责任——表示知道什么 行为责任 ...
随机推荐
- MVC – 9.mvc整体请求流程
1.请求管道 2~5微软自己的验证,我们一般不用. 在全局配置文件中-已经配置一个路由过滤器-为第7个事件注册了路由方法 1.在application_start中向静态路由表注册了路由数据,在管道第 ...
- 【LOJ】 #2011. 「SCOI2015」情报传递
题解 一写过一交A的一道数据结构水题 我们发现大于C可以转化为这条路径上有多少个在某天之前开始调查的情报员,离线全部读入,变成树上路径查询某个区间的数出现过多少次,构建一棵根缀的主席树,查询的时候用两 ...
- 监控属性数组(Observables Arrays )
如果你想发现并响应一个对象的改变,就应该用监控属性(observables).如果你想发现并响应一个集合的变化,就该用监控属性数组 (observableArray).监控属性数组在显示或编辑多个值以 ...
- .NET基本权限系统框架源代码
DEMO下载地址: 百度网盘:http://pan.baidu.com/s/147ilj http://download.csdn.net/detail/shecixiong/5372895 一.开发 ...
- SQL join关键字
如果一张表有很多个字段可能填入起来十分的困难复杂,不如把它拆分成两个表,然后查看的时候合并起来. 比如我要记录学生的姓名,班级,成绩,父母的电话号码,那么我们可以创建一个表1 储存学生的姓名班级成绩, ...
- java 错误:无法找到或装入主类
1. 删除找不到的jar 2. 删除src以外的文件夹
- 介绍在JSP中如何使用JavaBeans?
在JSP中使用JavaBean常用的动作有: 1)<jsp:useBean />:用来创建和查找bean对象: 2)<jsp:setProperty />:用来设置bean的属 ...
- Tweet信息搜集工具tinfoleak
Tweet信息搜集工具tinfoleak 推特是国外用户常用的社交网站.通过分析用户发布的推文以及社交活动,可以获取大量的个人信息.Kali Linux新增一款Tweet信息搜索工具tinfole ...
- 路由跟踪工具0trace
路由跟踪工具0trace 0trace是Kali Linuz自带的一个Shell脚本工具.该工具基于已建立的TCP连接,进行路由探测,实现侦查和防火墙穿透功能.使用时候,用户首先使用Telnet之 ...
- PlayMaker的特殊事件FINISHED
PlayMaker的特殊事件FINISHED 在PlayMaker中,每个状态机都有一个特殊事件START.当启用状态机,触发START事件.其中,每个状态都可以有一个特殊事件FINISHED.当 ...