包装对静态方法/变量的访问的模式名称是什么?

时间:2016-12-15 10:02:26

标签: java design-patterns proxy wrapper

在问题How do the Proxy, Decorator, Adapter, and Bridge Patterns differ?之后,您如何描述我需要多次实施的以下模式?

场景是我引用了来自第三方类的静态方法或变量,但我想将它隐藏在接口后面,以便我可以模拟它进行测试。

例如,在Java中,commons-lang库有一个SystemUtils类,常量为IS_OS_WINDOWS等。我想运行独立于底层操作系统的测试并模仿各种操作系统,所以我按如下方式包含对常量的访问: / p>

interface ISystemUtils {
    boolean isOsWindows();
}

class SystemUtilsImpl implements ISystemUtils {
    @Override
    public boolean isOsWindows() {
        return SystemUtils.IS_OS_WINDOWS;
    }
}

这是一个代理,一个通用"包装"还是别的什么?

2 个答案:

答案 0 :(得分:5)

这称为Facade

  

外观是一个为更大的界面提供简化界面的对象   代码体,例如类库。门面可以:

     
      
  • 使软件库更易于使用,理解和测试,因为   门面有便捷的常见任务方法;
  •   
  • 出于同样的原因,使库更具可读性
  •   
  • 减少外部代码对库内部工作的依赖性,因为大多数代码使用外观,从而允许更灵活地开发系统
  •   
  • 使用一个精心设计的API包装设计不佳的API集合。
  •   

答案 1 :(得分:1)

Facade模式是一个很好的答案,虽然我同意它(通过我的经验至少)暴露了许多不同的操作/类。话虽如此,许多其他模式也可以用于相同的目的 - 代理可能是我的第一选择,但适配器或Mediator也可能是一个很好的选择。您可能遇到的另一个术语是“delegate”。