设计模式(一)设计模式概述及面向对象设计原则

今天开始学习设计模式相关的知识,所使用的资料是刘伟在CSDN博客发布的系列文章(点击下载pdf)。该系列文章详细讲解了设计模式的入门知识,并且还有有代码作为示例方便读者理解,有需要的朋友请下载pdf自行学习,本文仅为本人学习后的知识总结,欢迎大家留言共同探讨。

一、设计模式概述。

(1)什么是设计模式:

设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过 分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人 理解并且保证代码可靠性。

(2)设计模式有什么用:

可能会提高开发效率。使得设计方案更加通俗易懂。实现代码的可重用性和可扩展性。

 

二、面向对象设计原则。

(1)单一职责原则

一个类只负责一个功能领域中的相应职责。简单理解就是每个类只做自己该做的事情。例如在常见的MVC设计模式中,model层只负责数据访问、view只负责数据显示、controller只负责消息处理。

(2)开闭原则

软件应当对扩展开放,对修改关闭。即软件应尽量在不修改原有代码的情况下进行扩展。软件的需求难免会出现变化,如果每一次新增的需求都需要修改之前的代码将使得项目难以维护,所以好的程序应该在新增需求的同时不对原有代码进行修改,如同USB的热拔插一样。

(3)里氏代换原则

所有引用基类 (父类)的地方必须能透明地使用其子类的对象。例如:我喜欢动物,则我一定喜欢狗,因为狗是动物的子类,但是反之我喜欢狗并不能说明我喜欢动物。

(4)依赖倒转原则

抽象不应该依赖于细节,细节应 当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。例如:自行车有“行驶”方法,电动车也有“行驶”方法,为了方便我们可以把二者抽象成“车”这个父类并在其中定义一个抽象的“行驶”方法,然后在自行车和电动车中实现具体的方法,这样在调用时可以直接调用车的“行驶”方法而无需关心车的具体类型。

(5)接口隔离原则

使用多个专门的接口,而不使用单一的总接口,即不应该依赖那些不需要的接口。例如:在开发项目过程中我们总是将开发工作划分为:美工、后端、前端等小的工作内容并交给不同的员工去完成。而如果所有工作不进行划分,直接将所有工作内容交给每一个员工就会导致员工对自己的工作职能提出疑问:“我一个前端你让我写存储过程”,“我是后端你让我P图”……。

(6)合成复用原则

尽量使用对象组合,而不是继承来达到复用的目的。“组合”和“继承”的区别类似于”Has a”和”Is a”的区别。小明是一个人,人会挂掉所以小明也会挂掉。小明有一只老鹰,鸟会飞,但是小明只是有一只会飞的鸟,自己并不会飞。使用组合的好处是:降低了类之间的耦合度。

(7)迪米特法则

一个软件实体应当尽可能少地与其他实体发生相互作用。迪米特法则要求我们在设计系统时,应该尽量减少对象之间的交互,如果两个对象之间不必彼此直接通信,那么这两个对象就不应当发生任何直接的相互作用,如果其中的一个对象需 要调用另一个对象的某一个方法的话,可以通过第三者转发这个调用。

 

以上是在学习系列文章后的个人总结,详细的讲解示例代码请参考文首提供的电子书。