设计模式总结

紧跟上回 代码大全读后感——控制软件复杂性是软件构造过程的第一要务,我们知道软件开发是一个复杂的心理和智力活动。软件是一个工程产物,做工程其实就是在多、快、好、省四个字之间做折中和权衡。多要求功能多,快要求速度快,好要求实现质量高,省要求投入成本少。在定义清晰的软件中,功能并不是实现地越多越好,甚至力求精简,所以相对地,我们需要更多地考虑快、好、省三点。

通向快、好、省的道路

如何做到快?

  1. 建立一个高效、有经验的团队
  2. 复用已经开发过的功能模块,或者是内部开发,或者是社区中的开源实现,或者是可购买的商用软件

如何做到好?

  1. 在早期建立良好的架构,尽量减少较高层次的错误。
  2. 引入常规的代码审核流程,尽量减少编码引入的问题。
  3. 定义完善的测试过程,尽量减少遗留到维护阶段的问题。
  4. 在后期维护时,尽量做扩展,而不需要修改之前的代码导致引入新问题。出现问题从根本上解决,而不是临时修补。

软件的挑战在于虚拟,常常只有在做完时才知道是否可行,所以如果需要尽量借鉴之前的可行经验

如何做到省?

  1. 定义清晰的需求,不在开始做需求性价比很低的功能点。
  2. 实事求是,不做过度的设计,不做过早的优化。
  3. 合适的架构,提升模块、代码复用程度。

软件行业技术发展日新月异,但是由于软件开发中关系到人的心理和智力属性,而人在这两点上变化很小,所以软件开发的基本原则在几十年中变化也很小。所以即使行业发展迅速,关于解决复杂性本质的基本的经验一直没有变化。所以,从前人的经验中借鉴有很大的价值,可以避免因重复的过错带来的损失。

设计模式就是:在面对典型的可能大幅度增加软件复杂度的困境中,由前人积累的,类结构设计领域的解决方案。使用这样的解决方案目的是为了有效地降低当前和未来可能的复杂度

其中首先需要强调的是,每个设计模式都是为了解决具体困境下的问题,没有合适的具体困境就谈不上使用某个设计模式。所以识别困境是使用设计模式的关键。

类结构设计要关注以下三个方面:

  1. 概念的分析:针对要解决的问题,抽象和细分概念
  2. 静态的结构:类的静态结构,类之间的关系
  3. 动态的执行:类的实例化、类方法的动态执行、相互之间的调用

以上三个方面中,概念分析是最高层的部分,其次是静态的结构,动态执行是最细节的部分。在设计的过程中,往往要自顶向下、自底向上多次循环往复。

所以在研究一个设计模式的具体方案时,要从以上三个方面入手。

设计模式的几个原则

高内聚低耦合

  • 单一职责:用于控制类的粒度大小。是最简单的面向对象设计原则。一个类是一个现实概念的抽象,类的粒度过大,表示其不再只表达单一概念,而将多个概念杂糅在一起。失去了灵活拆卸装配的复用性。
  • 开放封闭:对于扩展是开放的,对于修改是封闭的。是最重要的面向对象设计原则,是面向对象设计的核心所在。
  • 依赖倒置:针对接口编程,不要针对实现编程。
    • 高层模块不应该依赖低层模块。两个都应该依赖抽象。
    • 抽象不应该依赖细节,细节应该依赖抽象。
  • 里氏代换原则:一个软件实体如果使用的是一个父类的话,那么一定适用其子类,而且它察觉不出父类对象和子类对象的区别,即:在软件里面,把父类都替换成它的子类,程序的行为没有变化。
  • 迪米特法则 LoD:最少知识原则,如果两个类不必彼此直接通信那么这两个类就不应当直接发生直接的相互作用。若其中一个类需要调用另一个类的某个方法的话,可以通过第三者转发这个调用。

设计模式的分类

本文上部分 类结构设计要关注的三个方面 中,表达类结构设计需要关注 概念分析、静态结构、动态执行三个部分,设计模式也是基于这三个部分展开的。下面参考一篇外部文章。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

如何理解 GoF 的设计模式
Previous post
GoF 设计模式的分类
Next post