Home 结构型模式
结构型模式
取消

结构型模式

将类像搭积木一样搭建起来

  • 类结构型模式
  • 对象结构型模式
    • 关心类与对象的组合

 

适配器模式

  • 客户端可以通过目标类的接口访问它所提供的服务
  • :适配器
  • 被包装的对象:适配者
  • 将一个接口转换为客户想要的接口
  • 角色
    • target       目标抽象类
    • adapter    适配器类
    • Adaptee   适配者类
    • Client       用户
  • 目标类和适配者类解耦
  • 增加了类的透明性和复用性
  • 灵活性和扩展性很好
  • 类适配器
    • 优点:可以透明使用子类
    • 缺点:对于单继承语言,无法提供多个适配器

 

 

  • 对象适配器
    • 考虑到组合优于继承,适配器类关联适配者类

  • 缺点:当Adaptee不适合修改时,如果要适配这个类就需要生成Adaptee的子类,然后在Adapter内调用子类方法
  • 双向适配器
    • Java的inputStreamAdapter类用于包装InputStream类
    • 适配器中同时包含对目标类和适配者类的引用
  • 默认适配器模式(缺省适配器模式)
    • 实现适配器的部分接口

桥接模式

  • 多对多:n——m(两个维度)
  • 将继承关系转换为关联关系来解耦;同时减少类
  • 抽象和实现部分分离
  • 角色
    • 抽象类
    • 重写抽象类
    • 实现接口
    • 具体实现类

  • 优点:抽象和实现分离,优于多继承
  • 缺点:难以理解
  • 例如:跨平台播放器 

  

组合模式(整体-部分模式)

  • 例如Linux的文件树
  • 容器对象和叶子对象
  • 组合模式令客户不去区分容器对象和叶子对象,使用具有一致性

  • 文件树

  • 容器类聚合了组件类,这样容器类可以声明一个抽象组件类,并调用其子类叶子节点
  • 因为叶子和容器类同时继承了组件类,这样就模糊了容器类和叶子类的区别
  • 实例
    • 水果盘
    • 文件夹遍历
    • XML文档解析
    • Swing组件
  • 安全组合模式
    • 在叶子节点中不声明管理方法(管理list)
  • 透明组合模式
    • 在叶子节点中实现所有组件类的方法
  • 折中
    • 在叶子节点中实现所有组件类的方法,但是对于管理方法抛出异常
  • 组合模式的确定啊
    • 设计变的更加抽象
    • 新增叶子节点容易出错

 

 

 享元模式

  • 享元池
  • 角色
    • Flyweight    抽象享元类
      • 定义一个接口,通过该接口接受并作用于外部状态
      • 当有外部状态时,需要依赖外部类
    • ConcreteFlyweight    具体享元类
      • 为内部状态增加存储空间,可共享的,状态是内部的
    • UnsharedConcreteFlyweight    非共享具体享元类
      • 不强制共享
    • FlyweightFactory    享元工厂类
      • 创建并管理享元类


  • 处理内部状态

 

 

 

作业:

加密适配器

仿生机器人

毛笔

跨平台视频播放器

java虚拟机

该博客文章由作者通过 CC BY 4.0进行授权。