设计模式的用途


设计模式主要有两个用途:

  1. 提供了标准的术语系统,且具体到特定的场景。可以提高代码的可读性、可靠性,规范化地重用代码,
  2. 菜鸟可以快速上手软件设计

    设计模式的几大原则


值得注意的是,这些原则并不需要完全遵守。出于实际需求考量,很可能有某个设计模式打破了部分原则。不过原则在思想上仍然有其价值,在进行程序设计的时候应该尽可能地考虑到这些原则

开闭原则

软件实体应当对扩展开放,对修改关闭
即在程序需要进行拓展的时候,不能修改原有代码,实现热插拔的效果。我们需要通过接口和抽象类进行实现。
软件实体包括:

  • 项目中划分出的模块
  • 类与接口
  • 方法

    里氏代换原则LSP

    任何基类可以出现的地方,子类就可以出现。LSP是继承复用的基石,只有当派生类可以替换掉基类,且软件的功能不受影响的时候,基类才是真正被复用。LSP是对开闭原则的补充。

    依赖倒转原则

    该原则是开闭原则的基础。针对接口编程,依赖于抽象而不依赖于具体。即将抽象层放在程序设计的高层,并保持稳定,程序的细节由低层的实现层完成。
    这里的抽象,通常指接口或者抽象类。

    接口隔离原则

    使用多个隔离的接口,比使用单个接口好。即降低类之间的耦合度。

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

    一个实体,应当尽量少地与其他实体之间发生相互作用,不应该知道自己操作的类的细节,使得系统功能模块相对独立。

    合成复用原则

    通常,类的复用分为继承复用与合成复用。尽量使用合成/聚合的方式,而不是使用继承。
    继承复用的缺点:

  • 破坏了类的封装性。因为父类对子类是透明的

  • 子类和父类的耦合度高,父类的改变将造成子类的变化,不利于扩展维护
  • 限制了复用的灵活性,继承的实现是静态的,在编译时决定的,运行时不可能发生变化

    单一职责原则

    规定一个类应该有且仅有一个引起它变化的原因,否则类就应该被拆分
    承担过多的职责的缺点:

  • 一个职责的变化可能会削弱/抑制其他职责的能力

  • 若只需要部分的职责而使用该对象,则会将其他职责涵盖进来,造成冗余

该原则的核心也是解耦合,高内聚,其优点:

  • 降低类的复杂度,提高类的可读性、可维护性
  • 降低了修改的风险

    设计模式的分类与关系


分类

  1. 创建型模式:用于描述“怎样创建对象”,将对象的创建与使用进行分离
  2. 结构型模式:如何将类或者对象按照某种布局组成更大的结构
  3. 行为型模式:用于描述类或者对象之间怎样分配职责,相互协作共同完成单个对象无法完成的任务

    关系

    设计模式简介 - 图1

    名词解释

  • 热插拔:又名热替换、热添加。即允许在不关闭系统、不切断电源的情况下,进行扩展