POSA2:Wrapper Facade模式

意图

用更加简洁、健壮、可移植、可维护和内聚的面向对象接口,封装已存在的非面向对象API的函数和相关数据。

背景

使用已存在的非面向对象的API提供的服务或机制,开发可维护和进化的应用。

问题

  1. 简洁的代码比复杂的代码更加健壮,因为它易于理解和维护
  2. 可移植的软件可以容易的在不同的操作系统、编译器和硬件平台之间移植
  3. 提高软件可维护性,会降低开发生命周期的开销
  4. 高内聚的组件,易于学习、维护和增强

解决方案

结构

POSA

行为

POSA

实现

  1. 识别已有的过程式API中内聚的抽象和关系
  2. 把内聚的函数放入包装外观类中(Wrapper Facade Class)
    2.1. 创建内聚类
    2.2. 把多个独立的函数放入其中
    2.3. 自动创建和销毁,可以考虑使用构造函数和析构函数
    2.4. 选择间接的等级
    2.5. 检查依赖与特定平台变化的代码
  3. 考虑以可控地访问实现细节(Escape-Hatch)
  4. 开发一套错误处理机制
  5. 定义相关的帮助类(可选)

已知应用

  • MFC
  • ACE
  • 效果

优势

  1. 内聚的高层面向对象接口
  2. 易于移植和维护
  3. 模块化、可重用、可配置

不足

  1. 功能缩水(Escape-Hatch可以解决)
  2. 性能降低(类函数内联可以解决)
  3. 编程语言和编译器的限制
David++