Vary's Blog

设计模式概览

1.定义

  • 某类特定问题的代码设计解决方案
  • 是一套代码设计的经验总结

    设计模式,其实只是前人针对某类问题的代码设计经验而已,并没有很高大上

2.作用

  • 提高代码复用率,降低开发成本和周期
  • 提高代码可维护性、可拓展性
  • 使代码更加优雅
  • 让代码更容易被他人理解

3.七大设计原则

设计模式总览图

开闭原则

一个实体(类、函数、模块等)应该对外扩展开放,对内修改关闭

简单的说就是,别人可以基于你的代码进行拓展编写,但却不能修改你的代码。
反过来说就是,你在写代码时就要考虑到:怎么让别人可以不修改你的代码,就能对你的代码进行扩展。

开闭原则是面向对象设计中“可复用设计”的基石,是面向对象设计中最重要的原则之一,其他原则都可以看作是开闭原则的实现方法。

  1. 即每次发生变化时,要通过添加新的代码来增强现有类型的行为,而不是修改原有的代码。
  2. 符合开放封闭原则的最好方式是提供一个固有的接口,然后让所有可能发生变化的类实现该接口,让固定的接口与相关对象进行交互。

单一职责原则

一个类应该只能有一个引起它变化的原因。

一个类,只有一个引起它变化的原因。应该只有一个职责。每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起。这会导致脆弱的设计。当一个职责发生变化时,可能会影响其它的职责。另外,多个职责耦合在一起,会影响复用性。例如:要实现逻辑和界面的分离。

里氏代替原则

任何基类可以出现的地方,子类一定可以出现。
子类可以扩展父类的功能,但不能改变父类原有的功能。

  1. 在软件开发过程中,子类替换父类后,程序的表现行为是一样的。
  2. 只有当子类替换掉父类后软件的功能不受影响时,父类才能真正地被复用,而子类也可以在父类的基础上添加新的行为。

依赖倒置原则

程序要依赖于抽象接口,不要依赖于具体实现。简单的说就面向抽象进行编程,不要面向实现进行编程,这样就降低了客户与实现模块间的耦合。

  1. 高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。
  2. 抽象不应该依赖于具体,具体应该依赖于抽象。

接口隔离原则

程序不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。

使用多个专门的接口比使用单一的总接口要好。
一个类对另外一个类的依赖性应当是建立在最小的接口上的。
一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。

合成复用原则

在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分。

新对象通过向这些对象的委派达到复用已用功能的目的。简单地说,就是要尽量使用合成/聚合,尽量不要使用继承。

最少知识原则(迪米特法则)

一个模块或对象应尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立,这样当一个模块修改时,影响的模块就会越少,扩展起来更加容易。

如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中的一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。
关于迪米特法则的其他描述:只与你直接的朋友们通信;不要跟“陌生人”说话。

4.七大设计原则

分3大类,共23种设计模式.

设计模式总览图

Vary Zhao wechat
欢迎你扫描上面的二维码,加我微信