设计模式概要

总览

OOPs 的设计原则

  • 单一职责原则, SRP原则 (Single responsibility principle)
    • 高内聚, 低耦合. 自己能做的, 就不麻烦别人.
    • 每个类应该只有一个职责. 对外只能提供一种功能. 而引起类变化的原因应该只有一个.
  • 开闭原则, ocp原则 (open closed principle)
    • 一个对象对扩展开放, 对修改关闭
    • 对类的改动应该通过增加代码实现, 而不是修改现有的代码.
  • 里氏替换原则, LSP原则 (Liskov Substitution principle)
    • 在任何父类出现的地方都可以用它的子类来替代
    • 即: 同一个继承体系中的对象, 应该有共同的行为特征
  • 依赖注入原则, DI原则 (Dependency Injection)
    • 要依赖于抽象, 不要依赖于具体的实现
    • 要求我们在编程的时候针对抽象类或者接口编程, 而不是针对具体的实现编程
  • 接口分离原则, ISP原则 (Interface Segregation Principle)
    • 不应该强迫程序依赖他们不需要的方法.
    • 即: 一个接口应该只提供一种对外的功能. 不应该把所有的操作都封装到一个接口中
  • 迪米特原则 (Law of Demeter)
    • 最少知识原则. 一个类对于其他类知道的越少越好.
    • 类比: 只和朋友通信, 不和陌生人说话
    • 降低个个对象间的耦合, 提高系统的可维护性.
  • 总结: 高内聚, 低耦合, 可复用

设计模式简介

  • 创建型模式 Creational Pattern
    • 对类的实例化过程进行了抽象, 能够将软件模块中对象的创建和对象的使用分离.
    • 5种: 工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式
    • 记忆口诀: 创工原单建抽 (创公园, 但见愁)
  • 结构型模式 Structural Pattern
    • 关注于对象的组成以及对象之间的依赖关系, 描述如何将类或者对象结合在一起形成更大的结构.
    • 就像搭积木, 可以通过简单积木的组合形成复杂的, 功能更为强大的结构.
    • 7种: 适配器模式、装饰者模式、代理模式、外观模式、桥接模式、组合模式、享元模式
    • 记忆口诀: 结享外组适代装桥 (姐想外租, 世代装桥)
  • 行为型模式 Behavioral Pattern
    • 关注于对象的行为问题, 是对在不同的对象之间划分责任和算法的抽象化
    • 不仅仅关注类和对象的结构, 而且重点关注它们之间的相互作用.
    • 11种: 策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式
    • 记忆口诀: 行状责中模访解备观策命迭 (形状折中模仿, 戒备观测鸣笛)
Creational 创建型 Structural 结构型 Behavioral 行为型
Class Factory Method 工厂方法 Adapter (class) 适配器 Interpreter 解释器
Class Template Method 模板方法
Object Abstract Factory 抽象工厂 Adapter (object) 适配器 Chain of Responsibility 责任链
Object Builder 建造者 Bridge 桥接 Command 命令
Object Prototype 原型 Composite 组合 Iterator 迭代器
Object Singleton 单例 Decorator 装饰器 Mediator 中介者
Object Facade 外观 Memento 备忘录
Object Flyweight 享元/共享 Observer 观察者
Object Proxy 代理 State 状态
Object Strategy 策略
Object Visitor 访问者

UML类图

类型 图标 含义
泛化(继承) A ◁————— B B 继承(is) A, 即B是A的子类.
实现 A ◁- - - - - - - -B B 实现(realizes) A 接口
依赖 A - - - - - - - - >B B 作为 A 某个方法的参数. 两者强关联.
A 依赖/需要 B, 不然无法完成特定的事情.
关联 A ——————>B B 作为 A 的某种属性存在, 两者弱 关联
如 人(A) 住 房子(B). 但人和房子是没什么共性的独立事物
聚合 A ♢—————>B 语义上 B 可作为 A 的一部分, 但 B 可以独立存在
A has B 的关系. 如房子(A), 桌子(B)
组合 A ♦—————>B 语义上 B 是 A 的一部分, 但 B 无法独立存在.
A owns B 的关系, 如人(A), 大脑(B)
对应关系的数量 A m..n B B最多和m个数量的A有关系, A最多和n个数量的B有关系

uml_example

参考资料


原创于 DRA&PHO