设计模式(00):基础

一、OOP设计原则

1、开闭原则:OCP(open close principle)

类、模块、函数等对扩展开放,对修改关闭;这是最重要也是最为抽象的原则,其他的原则也是对它的实现提供了路径。

2 、单一职责原则:SRP(single responsibility principle)

有且只有一个原因引起类的变更;一个类的功能尽量单一,降低耦合。

3、里氏替换原则:LSP(liskov substitution principle)

很严格的原则,规则是“子类必须能够替换基类,否则不应当设计为其子类。”也就是说,子类只能去扩展基类,而不是隐藏或覆盖基类。

这条原则包含以下几个方面:

  • 子类必须完全实现父类的方法
  • 子类可以有自己的个性外观(属性)和行为(方法)
  • 覆盖或者实现父类方法时,参数可以被放大。即父类的某个方法参数为HashMap时,子类参数可以是HashMap,也可以是Map或者更大
  • 覆盖或者实现父类的方法时,返回结果可以被缩小。即父类的某个方法返回类型是Map,子类可以是Map,也可以是HashMap或者更小。

4、依赖倒置原则:DIP(dependence inversion principle)

高层模块不要依赖低层模块,所有依赖都应该是抽象的,抽象不应该依赖于具体细节,具体细节应该依赖于抽象。设计要依赖于抽象而不是具体化。

该原则包含以下几点要素:

  • 模块间的依赖应该通过抽象发生,具体实现类之间不应该建立依赖关系
  • 接口或者抽象类不依赖于实现类,否则就失去了抽象的意义
  • 实现类依赖于接口或者抽象类

总结起来,一句话:”面向接口编程“。

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

接口功能单一,避免接口污染。类间的依赖应该建立在最小的接口上

通俗点讲:使用接口时应该建立多个单一接口,不要建立一个臃肿庞大的多功能接口。

6、迪米特法则:LoD(Low of Demeter)

也叫“最少知识原则”,一个对象应当尽可能少的去了解其他对象。如果两个类不必彼此直接通信,那么他们就不不应该发生直接的相互作用。如果其中一个类需要调用另一个列的的某一个方法。可以通过第三者转发这个调用。

通俗点讲:一个类应该对自己需要耦合或者调用的类知道越少越好,被耦合或者调用的类内部和我没有关系,我不需要的东西你就别public了吧。

迪米特法则包含以下几点要素:

  • 只和朋友类交流:只耦合该耦合的类
  • 朋友间也是有距离的:减少不该public的方法,向外提供一个简洁的访问
  • 自家的方法就自己创建:只要该方法不会增加内部的负担,也不会增加类间耦合

二、模式分类

1、按照目的来分(广泛使用

2、按照范围来分

  1. -类模式处理类与子类的静态关系
  2. -对象模式处理对象间的动态关系

三、推荐参考书

《设计模式:可复用面向对象软件的基础》 GoF

《面向对象分析与设计》 Grady Booch

《敏捷软件开发:原则、模式与实践》 Robert C.Martin

《重构:改善既有代码的设计》 Martin Fowler

《Refactoring to Patterns》 Joshua Kerievsky

原文地址:https://www.cnblogs.com/springsnow/p/9391808.html