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)什么是责任 责任是类间的一种合约或义务,也可以理解成一个业务功能,包括行为.数据.对象的创建等 知道责任——表示知道什么 行为责任 ...
随机推荐
- scrollview 滚动布局
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layou ...
- s12-day04-work01 简单计算器功能实现
代码: #!/usr/local/env python3 ''' Author:@南非波波 Blog:http://www.cnblogs.com/songqingbo/ E-mail:qingbo. ...
- 性能测试常用的linux命令
性能测试常用的linux命令 linux测试nginx64bitredhatlighttpd 查看日志 awk '$4 ~/^\[27\/Nov\/2008:15:2[0-5]/ {print ...
- centos7 时间同步
yum -y install ntp systemctl enable ntpd systemctl start ntpd ntpdate -u cn.pool.ntp.org
- layer弹出层的关闭问题
就是在执行添加或修改的时候,需要将数据提交到后台进行处理,这时候添加成功之后最理想的状态是关闭弹出层并且刷新列表的数据信息,之前一直想实现这样,可一直没有成功,今天决定好好弄一弄,在仔细看过layer ...
- 【C#】利用反射构建实体
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...
- PHP 中如何正确统计中文字数
PHP 中如何正确统计中文字数?这个是困扰我很久的问题,PHP 中有很多函数可以计算字符串的长度,比如下面的例子,分别使用了 strlen,mb_strlen,mb_strwidth 这个三个函数去测 ...
- TP5视频教程课程内容
<TP5 视频教程课程内容> 一.ThinkPHP5TP5 官网基础教程, 官网手册作为参考,讲解TP5的使用方法.理解TP的用途 二.TP5大型项目实战及底层源码分析用TP5 做大型电商 ...
- 【BZOJ 3308】 3308: 九月的咖啡店 (费用流|二分图最大权匹配)
3308: 九月的咖啡店 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 244 Solved: 86 Description 深绘里在九份开了一家咖 ...
- BZOJ 1497 JZYZOJ 1344 [NOI2006]最大获利 网络流 最大权闭合图
http://www.lydsy.com/JudgeOnline/problem.php?id=1497 http://172.20.6.3/Problem_Show.asp?id=1344 思路 ...