设计模式介绍

1. 设计模式的介绍

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

2. 设计模式存在的初衷

由于软件行业的特殊性,需求可能会一直在变化,如果在软件开发过程中没有一个好的设计,那么在应对需求的变化可能会十分的被动,在这种情况下,为满足多变的需求,软件代码的维护往往会变得越来越臃肿,越开越复杂,代码的复杂度上去后,维护性、稳定性就会下降。引用自 Object-Oriented Analysis and Designwith Applications 一段话,如下:

建筑商从来不会去想给一栋已建好的100层高的楼房底下再新修一个小地下室——这样做花费极大而且注定要失败。然而令人惊奇的是,软件系统的用户在要求作出类似改变时却不会仔细考虑,而且他们认为这只是需要简单编程的事。

设计模式的初衷就是为了重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。

3. 8大设计原则

1、依赖倒置原则(Dependence Inversion Principle - DIP):

  • 高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象(稳定)。
  • 抽象(稳定)不应该依赖于实现细节(变化) ,实现细节应该依赖于抽象(稳定)。

2、开放封闭原则(Open Close Principle - OCP):

  • 对扩展开放,对更改封闭。
  • 类模块应该是可扩展的,但是不可修改。

3、单一职责原则(Single Responsibility Principle - SRP):

  • 指在类层面,方法层面,接口层面的职能都是单一的。更准确的解释是:就一个类而言,应该仅有一个引起它变化的原因。

4、里氏替换原则(Liskov Substitution Principle - LSP)

  • 子类必须能够替换它们的基类(IS-A)。
  • 继承表达类型抽象。

5、接口隔离原则(Interface Segregation Principle - ISP):

  • 不应该强迫客户程序依赖它们不用的方法。
  • 接口应该小而完备。

6、优先使用对象组合,而不是类继承:

  • 类继承通常为“白箱复用”,对象组合通常为“黑箱复用”。
  • 继承在某种程度上破坏了封装性,子类父类耦合度高。
  • 而对象组合则只要求被组合的对象具有良好定义的接口,耦合度低。

7、封装变化点:

  • 使用封装来创建对象之间的分界层,让设计者可以在分界层的一侧进行修改,而不会对另一侧产生不良的影响,从而实现层次间的松耦合。

8、针对接口编程,而不是针对实现编程:

  • 不将变量类型声明为某个特定的具体类,而是声明为某个接口。
  • 客户程序无需获知对象的具体类型,只需要知道对象所具有的接口。
  • 减少系统中各部分的依赖关系,从而实现“高内聚、松耦合”的类型设计方案。
posted @ 2021-12-06 23:51  Microm  阅读(75)  评论(0编辑  收藏  举报