我们首先来思考一个问题:作为工程师,我们的价值是什么?
笔者认为是——解决用户问题。
我们的任何知识和技能,如果不能解决特定的问题,那么就是无用的屠龙之术;我们的任何经验,如果不能对解决新的问题有用,那这经验就是过时的。工程师不是空谈者,也不是理论家,再好的理论,再好的设计,不能落地变成产品,不能解客户燃眉之急,那终究也是水中月镜中花,迟早要被淘汰。能解决现实中的问题才能体现作为工程师的价值。
但是,所有现实中的问题,都不是抽象的,比如我们不会提出一个“人是什么”“什么是善”这样的问题。我们要解决的问题,一定是特定场景下,加了一堆定语和描述,十分场景化的。比如:如何降低模块之间代码耦合度,如何解决高并发中的c100k问题,如何提高工程代码的可维护性等等。那么,针对这些特定的问题,早就经前人踩坑,总结出来的被认为行之有效的方式,就慢慢的沉淀为一种被称为“模式”的东西。从这个角度来说,算法是模式,设计模式是模式,架构也是模式——不同层面的解决方案而已。
每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地重用那些已有的解决方案,无需再重复相同的工作。简单地说,模式就是在特定问题场景下,解决特定问题的固定的套路。
设计模式简介
软件行业的设计模式,起源于1994年由GOF合著的《设计模式 - 可复用的面向对象软件元素》一书,该书首次提出了设计模式的概念,并且给出了23中经典的设计模式。此外讲设计模式的《Head First》一书通俗易懂、老少咸宜,也值得一看。
使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。因为设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。是无数正反经验教训的最终结晶,是设计智慧的最终载体。
所有的设计模式都有一些常用的特性:模式名称(a pattern name),问题陈述(a problem statement),解决方案(a solution)和效果(consequences)。模式名称用来描述模式的问题、解决方案和效果;问题陈述是用来说明这个模式的应用的领域;解决方案描述了这个模型的执行;效果则是这个模式使用效果和权衡。
设计模式使代码编制真正工程化,是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。
设计模式的主要作用
设计模式有两个主要作用:
-
最佳的实践
设计模式是长时间优秀经验的沉淀,提供了软件开发过程中面临的一般问题的最佳解决方案。学习这些模式就是让你站在巨人的肩上,看得更远,学得更快,少走弯路。
-
开发人员的共同平台
设计模式是程序员之间的共同语言,而且就像成语一样凝练。例如,单例设计模式意味着复用单个对象,观察者模式意味着一对多和解耦,“单例模式”“观察者”寥寥数语就能告诉对方,你的应用场景是啥、你要解决啥问题、你大致是怎么去编码实现的,从而在程序员之间高效的传递信息。
简言之,设计模式就是最佳实践。