设计模式学习 2020-11-12

绪论

  1. 设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解,是编程最佳实践

  2. 基本要素:名称 /问题 /解决方案 / 效果

  3. 分类

    • 创建型模式(5): 单例、原型、工厂方法、抽象工厂、建造者

    • 结构型模式(7): 代理、适配器、桥接、装饰、外观、享元、组合

    • 行为型模式(11): 模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器

  4. 面向对象设计原则 (高内聚低耦合 -> SOLID原则)

    • 开闭原则(O): 软件实体应当对扩展开放,对修改关闭 (创建新的类,而不是修改旧类)

    • 里氏替换原则(L): 子类可以扩展父类的功能,但不能改变父类原有的功能。也就是说:子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。

    • 依赖倒置原则(D): 高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象; 其核心思想是:要面向接口编程,不要面向实现编程。

      • A使用B,即为A依赖B,依赖倒置是说A不能直接使用B,而是使用B的接口(多态->可扩展性)(A并不需要关心实现接口的是B还是其它)
    • 单一职责原则(S): 类或方法应该有且仅有一个引起它变化的原因(?),否则类应该被拆分(类拆分)

    • 接口隔离原则(I): 要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。(接口拆分)

    • 迪米特法则(L): 如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。

    • 合成复用原则: 尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现

    • 注意:接口隔离原则和单一职责都是为了提高类的内聚性、降低它们之间的耦合性,体现了封装的思想,但两者是不同的: (完成某一职责需要多个接口方法的配合,接口方法存在于隔离的接口中)

      • 单一职责原则注重的是职责,而接口隔离原则注重的是对接口依赖的隔离。
  • 单一职责原则主要是约束类,它针对的是程序中的实现和细节;接口隔离原则主要约束接口,主要针对抽象和程序整体框架的构建。

行为型设计模式 (11)

模板方法: 定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤

策略模式->策略工厂模式: 当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能(实现某种目标存在多种策略可供选择的情况) ---Strategy

命令模式(Command): “方法的请求者”与“方法的实现者”之间经常存在紧密的耦合关系,如何将方法的请求者与实现者解耦? (人(调用者)->遥控器(命令)->电视(接收者)) :命令对象聚合执行者执行命令.

责任链(Chain of Responsibility)模式 问题: 一个事件需要经过多个对象处理的场景

为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止(通常情况下,可以通过数据链表来实现职责链模式的数据结构。);责任链模式的本质是解耦请求与处理,让请求在处理链中能进行传递与被处理;理解责任链模式应当理解其模式,而不是其具体实现。责任链模式的独到之处是将其节点处理者组合成了链式结构,并允许节点自身决定是否进行请求处理或转发,相当于让请求流动起来。


你可能感兴趣的:(设计模式学习 2020-11-12)