软件构造这门课程,说白了就是教我们怎样把软件写好。
在写软件,尤其是大型软件的时候,我们总是会遇到各种各样的问题。为了使我们的写作过程尽可能通畅,我们应该尽量在写代码之前就把整个工程构造设计好。但是,总不能每次都这么来吧,这不得累死?我们学计算机的,原则就是能少干就少干,最擅长的就是复用(别往“面向GitHub”编程那里想)。因此久而久之,我们就针对一系列经常面临的问题,总结出一套固定的套路来,这就是设计模式。
子曰:自古深情留不住,唯有套路得人心。夫子诚不我欺也!
文与可画竹,兔起鹘落者,胸有成竹也。学设计模式,就是直接体悟别人胸中的竹子。竹子分春夏秋冬之景,画法各不相同;我们面临的设计问题也是各有特点,自然也有不同的设计模式。
这个专题中,我们就去看看最经典的23种设计模式,看看他们的名字、解决的问题、提出的方案,以及各自的优缺点
【历史小茶】
“设计模式”这个术语最初并不是出现在软件设计中,而是被用于建筑领域的设计中。
1977 年,美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作《建筑模式语言:城镇、建筑、构造(A Pattern Language: Towns Building Construction)中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。
1979 年他的另一部经典著作《建筑的永恒之道》(The Timeless Way of Building)进一步强化了设计模式的思想,为后来的建筑设计指明了方向。
1987 年,肯特·贝克(Kent Beck)和沃德·坎宁安(Ward Cunningham)首先将克里斯托夫·亚历山大的模式思想应用在 Smalltalk 中的图形用户接口的生成中,但没有引起软件界的关注。
直到 1990 年,软件工程界才开始研讨设计模式的话题,后来召开了多次关于设计模式的研讨会。1995 年,艾瑞克·伽马(Erich Gamma)、理査德·海尔姆(Richard Helm)、拉尔夫·约翰森(Ralph Johnson)、约翰·威利斯迪斯(John Vlissides)等 4 位作者合作出版了《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Software)一书,在本教程中收录了 23 个设计模式,这是设计模式领域里程碑的事件,导致了软件设计模式的突破。这 4 位作者在软件开发领域里也以他们的“四人组”(Gang of Four,GoF)匿名著称。直到今天,狭义的设计模式还是本教程中所介绍的 23 种经典设计模式。
最后,我的大部分内容都来自这个网站,讲的非常好:
网友评论