2016-12-15 3 views
1

После того, как вы ответили на вопрос How do the Proxy, Decorator, Adapter, and Bridge Patterns differ?, как бы вы описали следующий шаблон, который мне нужно было реализовать несколько раз?Каково имя шаблона для переноса доступа к статическим методам/переменным?

Сценарий заключается в том, что я ссылаюсь на статический метод или переменную из стороннего класса, но я хочу скрыть его за интерфейсом, чтобы я мог высмеять его для тестирования.

Например, в Java библиотека commons-lang имеет класс SystemUtils с константами IS_OS_WINDOWS и т. Д. Я хочу запускать тесты, которые независимы от базовой ОС и имитировать различные ОС, поэтому я обертываю доступ к константе следующим образом:

interface ISystemUtils { 
    boolean isOsWindows(); 
} 

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

Это прокси, общая «обертка» или что-то еще?

ответ

4

Это называется Facade:

Фасад является объектом, который обеспечивает упрощенный интерфейс для большего тела кода, таких как библиотеки классов. Фасад может:

  • сделать библиотеку программного обеспечения проще в использовании, понимать и испытания, так как фасад имеет удобные методы для выполнения общих задач;
  • сделать библиотеку более читабельным, по той же причине
  • уменьшить зависимости от внешнего кода на внутренней работы библиотеки, так как большая часть кода использует фасад, что позволяет более гибко в развитии системы
  • обернуть плохо разработанный набор API-интерфейсов с одним хорошо разработанным API.
+0

Спасибо за быстрый ответ @adriaan. Фасад «чувствует» право, хотя я понимаю, что он обычно (всегда?) Участвует в покрытии элементов нескольких основных классов. Однако мой пример, возможно, охватывает большинство вышеупомянутых пунктов, в частности, первый. – Richard

+1

@ Gendarme Исправлена ​​компоновка линии Facade, tnx –

1

Паттерн Фасад хороший ответ, хотя я согласен, что это нормально (в моем опыте, по крайней мере) разоблачить ряд различных операций/классов. С учетом сказанного, ряд других шаблонов может также служить той же цели - прокси, вероятно, будет моим первым выбором, но Adapter или Mediator также могут быть хорошо подходят. Другим термином для этого, что вы также можете встретить, является «delegate».

Смежные вопросы