美文网首页
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类的破坏

    相关文章

      网友评论

          本文标题:GOF设计模式

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