设计模式开篇

Posted 欢乐的企鹅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式开篇相关的知识,希望对你有一定的参考价值。

设计模式开篇

什么是设计模式?

每一个模式描述了一个在我们周围不断发生的问题,以及该问题的解决方案核心。这样,你就能一次又一次地使用该解决方案而不必做重复劳动。 ————《建筑的永恒之道》by Christopher Alexander

简单地说,设计模式是在特定场景下,对经常发生的问题给出一个可复用的解决方案

值得注意的是,每一个模式都是一个特定的解决方案,所以我们要知道这个模式在解决什么问题。如果不清楚要解决的问题,强行使用某种设计模式,可能让代码更复杂。所以学习设计模式,不仅要学习怎么写代码,而且还要重点关注该模式的应用场景

设计模式之父
Christopher Alexander,哈佛大学建筑学博士、美国加州大学伯克利分校建筑学教授、加州大学伯克利分校环境结构研究所所长、美国艺术和科学院院士。

设计模式的目标是什么呢?
去除重复代码,简化逻辑,说明意图和提高灵活性。针对不同的应用场景,找出合适的设计模式后,实现一个通用接口。当需求变更时,只需修改少量的代码就能应对变化。

因此,什么是好的软件设计?
复用性是衡量一个模块设计好坏的重要标准之一。一个模块最理想的状态是不改变,其次是少改变。

设计模式从何而来?
模式这种说法起源于建筑领域,建筑师Christopher Alexande曾把建筑中的一些模式汇集成册。结果呢,模式这个说法却在软件行业流行了起来。最早Kent Beck和Ward Cunningham探索将模式这个想法应用于软件开发领域;之后,Erich Gamma 把这一思想写入了其博士论文。《设计模式》这本书出版的出版更是让设计模式在软件行业得到了广泛地认可和接受。四位作者Erich Gamma、Richard Helm、Ralph Johnson及John Vlissides也因此得到了GoF的称呼。我们今天大部分人知道的 23 种设计模式就是从这本书来的。

四人组(Gang of Four),简称GoF


通常提到的设计模式,隐含地表示“面向对象设计模式”。

面向对象是实现这些设计模式的基础。因此需要先深入理解面向对象

  • 向下深入理解面向对象三大机制
三大机制具体作用
封装隐藏内部实现
继承复用现有代码
多态改写对象行为
  • 向上需要掌握面向对象的这些机制带来的抽象设计意义,理解如何使用这些机制表示现实世界,掌握什么是“好的面向对象设计”。

软件领域通常会面临变更的挑战,给软件带来巨大的风险。软件领域设计复杂的根本性原因就是变化,比如客户需求的变化,技术平台的变化,市场环境的变化等等。这些变化会不断地摧毁着软件体系结构的设计。

那么如何解决变化带来的软件的复杂性呢?

  • 分而治之
    分而治之,将大问题分解成多个可解决的简单子问题。不过,光有分解还不够,需要考虑代码复用性和应对变化能力。
  • 抽象化
    我们不能够掌握复杂对象的全部,因此选择忽视它非本质的细节,而去处理泛化和理想化了的模型。把复杂的问题归到抽象体系中,用通用的方法进行统一处理。当需求变化时,只需要修改很少的代码,就能应对需求的变化,提高代码的可复用性。

总结时刻
通过这篇文章,我们学习了设计模式相关概念。设计模式是在特定场景下,对经常发生的问题给出了可复用的解决方案。设计模式关注的点在于应对变化,面对频繁变化的需求,能够提供通用的接口,把变化隔离起来;当有需求变化时,只需修改少量的代码就能应对变化,从而提高代码的可复用性,减少重复性工作。


最后,我想请你反思一下,在设计模块时,是否有意识地把需求变化的因素考虑进去呢?有没有分析该模块有哪些变化的因素, 并如何把它们隔离起来,从而应对变化,提高代码复用率?欢迎在评论区分享,和大家一起交流:)


参考资料
《设计模式:可复用面向对象软件的基础》

以上是关于设计模式开篇的主要内容,如果未能解决你的问题,请参考以下文章

设计模式开篇

bbb

桑德伯格加州大学伯克利分校2016毕业演讲+我从死亡中学到的东西

一.设计模式—开篇

设计模式开篇

设计模式开篇