美文网首页
GOF设计模式

GOF设计模式

作者: 谭英智 | 来源:发表于2021-07-11 17:43 被阅读0次

基本准则

  • 开放闭合原则

    对扩展开放,对修改关闭

  • 里氏代换原则

    所有引用基类的地方,都必须透明地使用其子类的对象

  • 依赖倒置原则

    抽象不依赖细节,细节依赖抽象,面向接口编程

  • 优先对象组合,而不是类继承

  • 引用优于聚合

23种设计模式

gof-class gof-relative
  • 创建型模式与对象的创建有关
  • 结构性模式与处理类或对象组合有关
  • 行为型模式与类或对象怎么交互有关

创建型模式

抽象工厂

gof-abs-factor
  • 对工厂进行抽象
  • 不同的工厂子类拥有不同的对象行为
  • 客户端面向工厂接口编程
  • 缺点是如果增加产品的种类,需要修改工厂的接口,破坏了开放闭合原则

Builder生成器

gof-builder
  • builder通过抽象出需要构建的不同part
  • 不同的子类对part拥有不同行为
  • 把builder的子类的对象赋予Director
  • Director控制需要构建不同part的顺序与创建
  • builder更关注子类的构建,有整体到局部的关系;而抽象工厂只关注子类的创建,而没有太关注整体局部的关系
  • builder通常与composite一起使用

工厂方法

gof-factor
  • 工厂方法与抽象工厂非常类似
  • 可以说工厂方法是抽象工厂的简化版
  • 抽象工厂的一个工厂可以创建不同类型的子类;工厂方法一般只创建一种类型的子类

原型

gof-proto
  • 一般用于运行时,通过clone的方法,快速创建对象并操作,而不需要复杂的构造来构造新对象

单例

gof-singleton
  • 用于构建只能有一个对象的类

结构型模式

Adapter适配器

gof-adapter
  • 引入第三方接口时一般与系统不一致
  • 通过继承引入子类
  • 子类通过实现父类方法,并对第三方接口进行封装,实现扩展和接口复用

Bridge桥接

gof-bridge-1
gof-bridge
  • 实现与抽象分离
  • XWindow和PWWindow是对不同的系统进行了细节的封装
  • 当要构建一个新功能时,如果通过继承,则必须又构建对两个不同系统的细节封装
  • 通过抽象出对不同系统下细节的封装放在一个类中
  • 引入另外一个类,通过组合的方式,引用原来的细节封装类,进行解耦和复用
  • 如果再又新的功能引入,只需要增加一个Windows子类,而不需要增加两个平台相关的WindowImp子类

Composite组合

gof-composite
  • 解决了部分和整体的对象关系表示

Decorator装饰器

gof-decorator
  • 在不影响其他对象的情况下,对某个子类新增加功能
  • 可以避免子类数量爆炸,组合出非常多的子类操作

Facade外观

gof-facade
  • 封装细节
  • 暴露统一简洁的API

Flyweight享元

gof-flyweight-sample
gof-flyweight
  • 通过对对象进行共享
  • 来减少对象的个数

Proxy代理

gof-proxy
  • 适用远程代理
  • 智能引用
  • 保护代理

行为模式

Chain of responsibility职责链

gof-chain
  • 通过引用下一个对象的指针,可以把多个对象串联成一个链表
  • 请求就可以顺着这个链,从头流到尾部

Command命令

gof-comman
gof-commands
  • 对不同的业务,同一提供一个execute接口
  • 可以非常方便的暴露同一接口
  • 并组合调用

Interpreter解析器

gof-interpreter
  • 不同的子类拥有不同的解析行为
  • 当某个子类需要其他子类协助才能进行解析的时候,通过调用其他子类的对象,进行复合解析

Interator迭代器

Mediator中介者

gof-mediator
  • 对不同的时间进行订阅
  • 对不同的订阅用中介者来决定需要通知的对象
  • 中介者内部维护了一个map

Memo

Observer观察者

gof-observer
  • 对象可以对感兴趣的事件进行订阅
  • 观察者一旦有状态的变更,会把变更通知订阅者

State状态

gof-state
  • 每个子类是一个状态的表示
  • 调用者维护状态之间的转换
  • 对状态抽象出统一接口,方便调用

Strategy策略

gof-strategy
  • compositor负责对不同细节的封装和抽象
  • Composition负责主体公共逻辑的实现
  • 通过strategy实现了抽象与实现分离

Template method模板方法

c++的模板

Visitor访问者

gof-visitor
  • 一个类通常一份数据,对于不同的引用者,可能需要的内容,格式要求都不一样
  • visitor对不同的内容提取者进行抽象,来避免对Element类的破坏

相关文章

  • 23种设计模式

    23种设计模式 GoF:(Gang of Four,GOF设计模式)---四人组 Design Pattern...

  • 设计模式之创建型

    设计模式概述 基于设计原则,GoF(设计模式总结4人组)总结了软件开发领域的23个经典设计模式。虽然GoF设计模式...

  • 设计模式之结构型

    设计模式概述 基于设计原则,GoF(设计模式总结4人组)总结了软件开发领域的23个经典设计模式。虽然GoF设计模式...

  • 设计模式之行为型

    设计模式概述 基于设计原则,GoF(设计模式总结4人组)总结了软件开发领域的23个经典设计模式。虽然GoF设计模式...

  • GOF的23种设计模式

    设计模式(Design Patterns) GOF的23种设计模式 GoF(“四人帮”,指Gamma, Helm,...

  • 19暑期学习-Day7

    休息~预习GoF设计模式

  • GOF的23种设计模式

    一、GOF简介 GOF是设计模式的经典名著Design Patterns: Elements of Reusabl...

  • 11. 设计模式分类

    设计模式的分类,把GoF的23个设计模式写完之后再写

  • 漫谈设计模式在 Spring 框架中的良好实践

    在开始正文之前,请你先思考几个问题: 你项目中有使用哪些 GOF 设计模式 说一说 GOF 23 种设计模式的设计...

  • 工厂模式

    工厂模式 问题: 工厂模式分为几类? GOF 23种设计模式中,工厂方法模式和抽象工厂模式有什么区别? 不在GOF...

网友评论

      本文标题:GOF设计模式

      本文链接:https://www.haomeiwen.com/subject/emnkpltx.html