设计模式的核心思想
什么是设计模式
- 设计模式是程序员在面对同类软件工程设计问题所总结出来的有用经验,模式不是代码,而是某类问题的通用解决方案,设计模式代表了最佳的实践。
- 每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次的使用该方案而不必做重复劳动。
设计模式的重要性
- 在项目开发周期中,编码前的设计是至关重要的。只有好的设计模式才能有好的代码框架。好的设计模式不仅会让代码结构变得清晰,而且会极大的提高软件代码的复用性,从而缩短软件开发周期,提高生产效率。
- 可以说能不能使用和设计出最适合当前项目的设计模式,是区分是不是一个优秀程序员的重要标志。
如何解决软件设计的复杂性
- 我们在面对复杂的问题时最常用的两个思想就是分解和抽象
分解
- 人们面对复杂问题最常见的做法就是分而治之,讲大问题分解为多个小问题,讲复杂问题分解为多个简单问题。
- C语言是典型的面向过程的编程语言,所以使用C语言的开发者,对这种思想应该是非常熟悉,平常过的开发中用的最多的
就是这种思想了。
抽象
-
更高层次来讲,人们处理复杂性有一个通用的技术,即抽象。 由于不能掌握全部的复杂对象,我们选择忽视它的非细节本质,而去处理泛化和理想了的对象模型。
-
抽象是要对软件功能按照模块进行抽象,抽象的过程中要了解模块中变化的部分和不变的部分来进行抽象。本质上这种抽象的思想是一种面向对象设计的思想。 使用面向对象设计,才能很好的在代码中实现晚绑定,实现功能模块的松耦合。
-
学习设计模式的第一步,就是要有面向对象设计的思想。 为什么这么说? 使用设计模式很重要的一项就是提高代码的复用性。变化是复用的天敌,而面向对象设计最大的优势就是抵御变化。
面向对象的八大设计原则
- 依赖倒置原则
- 高层模块不应该依赖于低层模块, 两者都应该依赖于抽象。
- 抽象不应该依赖于实现细节,实现细节应该依赖于抽象。
- 开放封闭原则
- 对扩展开放,对更改封闭。
- 类模块应该是可扩展的,但是不可修改。
- 单一职责原则
- 一个类应该仅有一个引起它变化的原因。
- 变化的方向隐含着类的责任。
- Liskov 替换原则
- 子类必须能够替换它们的基类。
- 继承表达类型抽象。
- 接口隔离原则
- 不应该强迫客户程序依赖它们不用的方法。
- 接口应该小而完备。
- 优先使用对象组合, 而不是类继承
- 类继承通常为“白箱复用”, 对象组合通常为“黑箱复用”。
- 继承在某种程度上破坏了封装性,子类父类耦合度高。
- 而对象组合则只要求被组合贷对象具有良好定义的接口,耦合度低。
- 封装变化点
- 使用封装来创建对象之间的分界层,让设计者可以在分界层的一侧进行修改,而不会对另一侧产生不良的影响,从而实现层次间的松耦合。
- 针对接口编程而不是针对实现编程
- 不将变量类型声明为某个特定的具体类,而是声明为某个接口。
- 客户程序无需获知对象的具体类型,只需要知道对象所具有的接口。
- 减少系统中各部分的依赖关系,从而实现“高内聚,低耦合”的类型设计方案。
总结
- 了解这些设计模式的核心思想,才可以对设计模式有基本的认识,知道设计模式为什么要这样设计,知道这样设计的思想是什么,了解这些思想往往比知道某一个设计模式的设计机制更为重要。