资讯专栏INFORMATION COLUMN

被误读的设计模式

William_Sang / 1977人阅读

摘要:可以说,如果问题是我们的敌人,代码是我们的剑,设计模式就是高手心中的剑谱。中级选手,在编程的时候知道何时该用什么设计模式,而什么时候不该用。设计模式被用来简化设计,让设计更优雅。其中最具有普遍性的方案往往就是我们的设计模式的内容。

目录概要

设计模式的开山之作

对设计模式的误解

关于使用设计模式的3个问题

无处不在的设计模式

如何解释设计模式

设计模式的开山之作

1994年10月21日,有四个哥们儿出版了一本书,名字叫做《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Software)。

这四个哥们儿后来以“四人帮”(Gang of Four,GoF)著称,而他们的《设计模式:可复用面向对象软件的基础》一书也就成为了设计模式的开山之作。

对设计模式的误解

之前发布了几篇介绍设计模式的的博客,看到有的读者对设计模式的评论是:

看了也不会,会了也不用

设计模式有使用场景的,不能生搬硬套

我写了那么多年代码,从来没用过设计模式

关于使用设计模式的3个问题

这里我不得不说,大家对设计模式是有很多误解的,面对设计模式我们至少要思考下面3个问题:

首先,什么是设计模式?

设计模式简而言之就是一些常见软件设计问题的标准解决方案

正如设计模式的开山之作《设计模式:可复用面向对象软件的基础》一书中所说的那样:

所有结构良好的面向对象体系结构中都包含了许多设计模式。

设计面对向软件比较困难,而设计可复用的面向对象软件就更加困难。

内行的设计者知道:不是解决任何问题都要从头做起。他们更愿意复用以前使用过的解决方案。当找到一个好的解决方案,他们会一遍又一遍地使用。这些经验是他们成为内行的部分原因。

可以说,如果问题是我们的敌人,代码是我们的剑,设计模式就是高手心中的剑谱。

接着,怎么使用设计模式

《Head First 设计模式》一书的作者里曼说,使用设计模式有3个层次:

• Beginner —— 初级选手,在编程的时候无处不用设计模式,认为用的模式越多设计就越好。

• Intermediate —— 中级选手,在编程的时候知道何时该用什么设计模式,而什么时候不该用。

• Zen —— 到了禅的境界,“他山之石,可以攻玉”。设计模式被用来简化设计,让设计更优雅。

非要把设计模式硬塞到设计之中,那只是初级菜鸟的层次。

最后,设计模式在实际生产中使用的多不多?

设计模式本身就是源自实际问题的优秀解决方案的总结,因此在很多基础的架构和框架里,都可以看到设计模式的影子。

比如Java开发者经常使用的Spring框架,从创建型的工厂模式、单例模式、原型模式,再到结构型的享元模式、代理模式,再到行为型的观察者模式、模板模式,在其源码中随处可见。

无处不在的设计模式

设计模式不是空中楼阁,也不是只有面试和吹牛的时候才能放在嘴边的炫耀资本,而是一个优秀的开发者可以让自己的设计更加优雅的不可或缺的好帮手。

并且设计模式也并不是软件行业特有的现象,很多行业中有经验的从业者都会使用各种“模式”来优化自己的设计。

就拿剧本创作举例,如果一个剧作家要写一个剧本,并不是完全凭空创建的,也有各种业内普遍应用的模式,例如“悲剧英雄模式”(《麦克白》、《哈姆雷特》)、“凄美爱情模式”(《罗密欧与朱丽叶》、《梁山伯与祝英台》)等等,都是剧作家可以使用的“设计模式”。

如何解释设计模式

一般而言,要介绍一个设计模式,至少要包含如下4个要素:

问题(Problem)

描述了我们遇到了哪些问题,也就是某个设计模式的使用场景。

解决方案(Solution)

为了解决上面遇到的问题,我们想到了哪些解决方案。其中最具有普遍性的方案往往就是我们的设计模式的内容。

效果(Consequence)

设计模式就像一个模板,可以为解决不同的问题提供思路。而解决问题的效果就是衡量一个设计模式在某个场景下是否适合的关键因素,一般我们要衡量的方面有灵活性、可移植性、可扩充性、性能等。

模式名称(Pattern Name)

一个好的名字,可以让我们记住某个模式,并且可以望名知意,使其更便于传播。甚至作为我们思维方式的一部分保留下来。

以上面4个要素为基础,我们解释设计模式可以分为如下几个方面:

模式名称:模式的名字

模式别名:模式的其他名字或者昵称

模式分类:模式属于那种类型

模式意图:回答模式是干什么的,为了解决什么问题等问题

模式结构:模式包含哪些角色,以及这些角色之间的关系

模式适用性:哪些场景适合使用该模式

模式实现:通过例子来展示模式的实现过程

已知应用:该模式已经被使用在了什么地方

相关模式:模式中用到的模式,与该模式有替代关系的模式

发布/订阅模式事件驱动模型 从原理到实战的系列文章:

设计模式之发布订阅模式(1) 一文搞懂发布订阅模式

设计模式之发布订阅模式(2) Redis 发布/订阅模式

设计模式之发布订阅模式(3) 深入Spring Events事件驱动模型

设计模式之发布订阅模式(4) Guava Eventbus 事件处理

设计模式之发布订阅模式(5) Spring Events源码解析

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74464.html

相关文章

  • Flutter 会不会苹果限制其发展_,移动智能终端开发报告

    摘要:到如今都没有官方支持热更新,这大概也是为了应用不受苹果审核条款的忌惮,一旦支持了热更新,那在过审核的时候可能就会没那么容易了,所以热更新对于在平台的存亡是一个重要因素。 再说风险1、和 react-native 、weex 、uni-app 、taro 等平台不同,flutter framework 的大部分控...

    不知名网友 评论0 收藏0
  • 金蝶云之家欲干掉OA, 底气从何而来呢?

    摘要:直到年月日,金蝶微博品牌正式升级为云之家,从打造社交化工作空间,向提升企业的运营和管理效率倾斜。所以客观地说,随着这几年金蝶的不断发力,深耕大样板客户和产品,给了云之家更多颠覆的勇气和信心。提起OA市场大家更多的会想到的是泛微、致远、蓝凌,自从泛微上市以来原本三分天下的格局被打破。泛微在市场上对另外两家采取高压态势,蓝凌选择紧抱阿里的大腿寻找避风港湾,致远则选择差异化竞争,放弃OA这个名词转...

    Yumenokanata 评论0 收藏0
  • angular2初入眼帘之-搭个环境

    angular2是什么?我猜不容我赘述,各位一定略有耳闻,无论是曾经AngularJS的拥趸,亦或是React的粉丝,都或多或少的对她有过一点了解。未见其物、先闻其声,angular2在问世之前已经做足了宣传,想必诸位也一定被下面各种词汇所震慑,什么:TypeScript、 ES5、 ES6、 Dart、 Immutable、 Unidirectional Data Flow、 Reactive ...

    everfight 评论0 收藏0
  • 程序员干私活搞副业,今年2000明年还是吗?个税搞清楚了吗?

    摘要:今天知识星球发文公告月日之后产生的收入,对个人用户将收取手续费。存在两种情况一部分人会实行退税,一部分人会实行补缴。所以,对于高收入群体,明年月份就很可能会存在需要补缴个税的情况。不要因为政策原因的不了解,最终导致一年的辛苦努力大打折扣。 今天知识星球发文公告:8月20日之后产生的收入,对个人用户将收取20%手续费。 showImg(https://segmentfault.com/i...

    worldligang 评论0 收藏0

发表评论

0条评论

William_Sang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<