结构型设计模式

阅读本文大概需要5分钟

如果忘了创建型设计模式相关内容的话请点击该链接。本文简单介绍结构型设计模式,相关代码以上转至github

开篇不忘tips:每次都回忆一下面向对象六大原则,心里默默回想一下是如何描述的吧

  1. 单一职责
  2. 开闭原则
  3. 里氏替换原则
  4. 依赖倒置原则
  5. 接口隔离原则
  6. 迪米特原则

桥接模式(Bridge Pattern)

  • 定义

    将抽象部分与实现部分分离,使各自可以独立变化

  • 场景

    • 多维度变化类或多个树状类之间的耦合都可以用桥接模式解耦
    • 一个类存在两个独立变化的维度,且这两个维度都需要进行扩展
  • UML类图

这里写图片描述

外观模式(Facade Pattern)

  • 定义
    为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得一系列子接口更加容易使用

  • 场景

    • 常见的封装第三方SDK,对外提供统一接口
    • 当需要构建一个有层次的子系统时,使用Facade模式来定义系统中每层的入口点
  • UML类图

这里写图片描述

组合模式(Composite Pattern)

  • 定义
    将对象组合成树形结构以表示 “部分 - 整体” 的层次结构。组合模式使得用户对单个对象和组合对象的使用时一致性的

  • 场景

    • 需求中需要体现部分与整体层次的结构时,可以考虑组合模式
    • 希望用户可以忽略组合对象与单个对象的不同,统一使用组合结构中的所有对象时,可以考虑组合模式

-UML类图

这里写图片描述

装饰模式(Decorator Pattern)

  • 定义
    动态的给一个对象增加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活

  • 场景
    需要透明且动态的扩展类的功能时,可以使用装饰模式

  • UML类图

这里写图片描述

适配器模式(Adapter Pattern)

  • 定义
    讲一个类的接口转化成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作

  • 场景

    • 系统需要使用现有的类,而此类的接口不符合系统的需求,即接口不兼容
    • 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的一些类一起工作
    • 需要一个统一的输出接口,而输入端的类型不可预知
  • UML类图

这里写图片描述

代理模式(Proxy Pattern)

  • 定义
    为其他对象提供一种代理以控制对这个对象的访问

  • 场景
    当无法或不想直接访问某个对象或访问某个对象存在困难时可以使用代理模式

  • UML类图

这里写图片描述

享元模式(FlyWeight Pattern)

  • 定义
    使用共享对象可有效的支持大量的细粒度的对象

  • 场景

    • 系统中存在大量的相似对象
    • 细粒度的对象都具备较接近的外部状态,而内部状态与环境无关
    • 需要缓冲池的场景
  • UML类图

这里写图片描述

上述设计模式相关代码都已上传至gihub仓库中https://github.com/JocherCH/java-pattern,本文首发https://jocherch.github.io

RiderWu wechat
欢迎您扫一扫上面的微信公众号,目前试运营当中。