搜索
您的当前位置:首页正文

《设计模式》之禅

来源:二三娱乐

在讲设计模式之前,我们首先要了解设计模式:

  • 单一原则(Single Responsibility Principle)
  • 里氏替换原则(LSP Liskov Substitution Principle)
  • 依赖倒置原则(Dependence Inversion Principle)
  • 接口隔离(Interface Segregation Principle)
  • 迪米特原则(Law Of Demeter LOD)
  • 开闭原则(Open Closed Principle)

即使之前没有专门看过这些原则,但是实际开发中或多或少都会用到。实际上,这些原则的目的只有一个:降低对象之间的耦合,增加程序的可复用性、可扩展性、可维护性。优秀的设计模式就是基于这些原则去实现的。

六大设计原则

一个类应只包含单一的职责。

* 类的复杂性降低,实现什么职责都有清晰明确的定义。
* 可读性提高,复杂性降低。
* 可维护性提高,可读性提高。
* 变更引起的风险降低。

使用父类的地方能够使用子类来替换,反之则不行。

* 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
* 子类中可以增加自己特有的方法(个性化)。
* 当子类的方法重载父类的方法时,方法的形参要比父类方法的输入参数更宽松。
* 当子类的方法实现父类的抽象方法时,方法的返回值要比父类更严格。
* 父类应当被尽量设计为抽象类或者接口,让子类继承父类或实现父接口。

抽象不应该依赖于细节,细节应当依赖于抽象。

* 模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的。
* 接口或抽象类不依赖于实现类。
* 实现类依赖接口或抽象类。
* 高层模块不应该依赖低层模块,应该去依赖抽象。

一个类对另一个类的依赖应该建立在最小的接口上。

* 一个类不应该依赖他不需要的接口。
* 接口的粒度要尽可能小,如果一个接口的方法过多,可以拆成多个接口。
* 接口可以多级继承。

一个类尽量不要与其他类发生关系。

* 一个类对其他类知道的越少,耦合越小。
* 当修改一个类时,其他类的影响就越小,发生错误的可能性就越小。

一个模块、类、函数应当是对修改关闭,扩展开放。

* 修改原有的代码可能会导致原本正常的功能出现问题。
* 因此,当需求有变化时,最好是通过扩展来实现,增加新的方法满足需求,而不是去修改原有代码。

23种设计模式

设计模式一般分为三类:创建型模式、结构型模式、行为型模式。

另外,除了这23种经典的设计模式,还涌现出其他的一些新的设计模式,比如:规格模式、对象池模式、雇工模式、黑板模式和空对象模式等等。后面有时间的话也会对这些模式进行分析。

参考文章

Top