聊聊软件开发中的设计模式

本科读的软件工程专业,《设计模式》是一门专业课,大概一个学期有48个学时来学习这门课,并且学习的过程中,要穿插着上机操作实验,编写相关的设计模式相关的代码。(要感谢大学时期教授软件设计模式这门课的刘伟老师,当然刘伟老师在CSDN上的设计模式专栏也有几百万的访问量,使很多人受益了,传送门 https://blog.csdn.net/lovelion/article/details/17517213 )

设计模式总的来说就是软件开发人员的内功心法。当然不能为了模式而模式,不要有了锤子,就看哪里都是钉子。

设计模式不是软件行业特有的,他最初起源于建筑行业。从建筑行业设计当中,总结出了一套自己的设计模式(所以有时间抓一个建筑专业的同学问问,他们大学的时候是不是也有设计模式这门课。)这样,建筑行业的设计师就可以重复的使用那些成功的案例的解决方案,就不需要每次都花费大量的精力去设计。

同样的,将面向对象编程中反复使用、重复出现的设计方案总结出来一套就是软件开发中的设计模式。设计模式的关注点不光是软件开发编码实现的过程,而是在分析、设计、实现之间的桥梁,方便大家之间的沟通,具备一定的语义性质,就比如说后面会讲到的策略模式,开发人员在接手新项目时,看到这里的策略设计模式,就会清楚的知道这里是有多种策略的,就会有意识的辨别不同的策略实现。

以“四人组(Gang of Four,简称GoF,分别是Erich Gamma, Richard Helm, Ralph Johnson和John Vlissides)”自称的四位著名软件工程学者,他们在1994年归纳发表了23种在软件开发中使用频率较高的设计模式。

这里要划下重点,设计模式是基于面向对象编程语言的,诸如 Java、C#、Objective-C、VB.net、Smalltalk等纯面向对象编程语言,还是使用C++、PHP、Delphi、JavaScript等可支持面向对象编程的语言。

设计模式的基础就是面向对象编程中的设计原则,这些设计原则蕴涵在这23中设计模式中,面向对象设计原则如下:

单一职责:一个类只负责一个功能领域的职责

开闭原则:对扩展开放,对修改关闭

里氏代换:任何使用基类的地方,都可以用其子类来代换 

依赖倒转:抽象不依赖具体的细节,细节依赖抽象

接口隔离:使用多个专门的接口,不使用单一的总接口

合成复用:尽量使用对象组合,而不是继承

迪米特法则:一个类尽可能少的与其他实体类发生作用,这个也是DDD领域驱动设计中的原则,每一个实体类都有自己的领域,都有自己的生命周期,所以尽量避免每个领域相互交叉。

23种设计模式中涵盖了一个或者多个面向对象设计原则,这里要注意,有些设计模式一方面符合了某个面向对象设计原则,另一方面可能也违反了某个面向对象设计原则。

这23种设计模式主要分为三个类别,创建型、行为型、结构性。

创建型设计模式主要描述如何创建对象

行为型主要是类与对象如何交互以及怎样分配职责

结构型主要是描述类和对象间的组合关系

 

 

 

你可能感兴趣的:(软件内功)