https://kaiwu.lagou.com/course/courseInfo.htm?courseId=1307

你好,我是山海。我已经是 8点一课 的老作者了,有时候也会收到读者提问,比如:

……

我发现,不管有没有开发经验,很多读者都对“设计模式”的作用和实践模棱两可,很多结论并不是来源于自己敲代码的实际经验,而是人云亦云。那屏幕前的你,对于设计模式,又是怎么认为呢?

如果你认为自己在工作中并没有使用到设计模式,那我认为,你可能并没有真正地认识设计模式。

你真的认识设计模式吗?

你知道设计模式起源于建筑领域吗?

最初,Christopher Alexander 及其团队总结了建筑行业可复用的解决方案,他们记录下不断出现的问题,然后整理了该问题的核心解决方案,形成了“模式”。通过这种做法,他们可以无数次地复用那些已有的成功解决方案,无须再重复已经做过的工作。简单一点表述就是:模式是在特定环境下解决某类重复出现的问题的一套成功或有效的解决方案

对于程序也是如此,1994 年由四人组(Gang of Four)把“模式”的概念引入软件工程中,整理归纳了 23 种在软件开发中使用频率较高的设计模式。这些模式都给出了一定的场景作为例子,并对这些场景的实现给了具体的代码事示例,可以归纳为以下几类设计模式:

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

除以上几类以外,还有两大类:并发型模式和线程池模式

认真想一想,你就会发现设计模式对于我们程序员来说真是无处不在。无论是在面试中,还是在实际开发中,还是在读代码的时候,你都会遇到设计模式。甚至你今天的代码写得很漂亮,就是复合了一种设计模式,你却并没有注意到。

在你以往的开发工作中,有没有人对你的代码表示过特别认可?有没有人说过你写的代码扩展性非常高,耦合度非常低?甚至,你的代码能不能成为扩展的规范,把常修改的、会发生改变的点规范出来,让后辈能根据你的方式方法来扩展代码?如果没有,那你真的需要继续学习设计模式,才能在“好代码”的道路上更进一步。

当然你可能会有一些不服气,凭什么就认定这些模式是最优的,是最好的写法呢?那我们不如先来讨论一下,什么样的代码才是公认的“好代码”?

通常,符合以下几点的代码会被认定为是优秀的代码:

  1. 单一职责原则
  2. 里氏替换原则(Liskov Substitution Principle)