0%

常用设计模式

设计模式列表备忘

  • 原则
    • 开闭原则 (封装不变,开放变化) 也说成对扩展开放, 对修改关闭
    • 里氏替换 (任何基类出现的地方一定可以用派生类替换)
    • 依赖倒置 (针对接口编程,依赖于抽象)
    • 接口隔离 (使用多个单一功能接口, 比使用单个复杂接口好)
    • 迪米特法则 (最少知道原则, 一个实体应尽量少地与其他实体之间发生相互关联)
    • 合成复用 (尽量使用组合,而不是使用继承)
  • 池模式
    • 对象池 / 内存池 (对象重复利用,减少内存的频繁申请与释放)
    • 线程池
    • 连接池
  • 创建型
    • 单例模式
    • 简单工厂方法 (一个方法,根据不同参数返回不同对象)
    • 工厂模式 (每个工厂对应一种产品, 利用一个工厂对象不断生成同类型产品)
    • 抽象工厂模式 (一个抽象工厂提供多种产品接口, 但每个产品的实际生产依赖不同的实际工厂对象生产的 "零件")
    • 创建者模式 (分部分,逐步构造复杂对象的各个部分, 最后调用一个 build() 方法构造出复杂对象)
    • 原型模式
  • 结构型
    • 适配器模式 (不同接口适配)
    • 代理模式
    • 装饰器模式
    • 外观模式 (繁杂复杂接口封装为简单易用的接口)
    • 桥接模式 (变化的不同维度分别拆分抽象,再组合起来。书本 1, 书本 2, 颜色 1, 颜色 2, 不应该弄 4 种子类,而是 I 书本包含 I 颜色,书本有两种实现, 颜色有两种实现)
    • 组合模式 (整体与层次关系,单个对象与组合对象有一致接口。树状结构, 由基本节点可以组合出枝节点,枝节点可以继续组合, 且组合节点与基本节点有完全一样的接口,可以不做区分调用)
    • 享元模式 (工厂模式该进,有点像对象池的意思,若需要大量相同子对象, 可以在细粒度上构建共享资源,防止过多相同的内存开销; 例如一些语言中的 String 池,相同字符串都指向内存同一地址, 而不是新创建)
  • 行为型
    • 策略模式 (将处理方法抽象化, 针对不同的选择传入不同的处理方法对象)
    • 模板方法模式
    • 观察者模式 (订阅 - 通知)
    • 中介者模式 (将多个对象互相复杂依赖改为星型结构, 每个对象都只与中介者交互依赖)
    • 状态模式 (将状态封装,对象具有状态,状态可转换, 对象的相同接口在不同状态下有不同表现,接口实现可依赖于状态的实现)
    • 责任链模式 (收到一个请求: IP 过滤 -> 授权验证 -> 日志记录 -> 请求处理 -> 页面渲染)
    • 命令模式 (将控制 / 操作由接口调用改成封装成命令对象 , 可以用于需要 操作历史 / 操作日志 / 撤销重做 的场景)
    • 备忘录模式 (发起人,备忘录,管理者, 只有发起人可以将自己内部状态存入备忘录对象,或者从中读取内部状态; 管理者管理备忘录对象,但不能读取 / 操作备忘录对象内部内容; 游戏角色在战斗失败后恢复到战前的状态)
    • 迭代器模式 (iterator)
    • 访问者模式 (数据对象的类很少改变,但经常需要在此对象上定义新的操作, 定义访问者类封装了对数据类的执行算法, 这样数据对象的执行算法可以随着访问者的改变而改变)
    • 解释器模式 (符号解析)