Подтвердить что ты не робот

Каковы различия между прокси-серверами, оболочкой или фасадными классами

Каковы различия между прокси-серверами, оболочкой или классами фасадов.

Все они кажутся мне одинаковыми, они выполняют реализацию, инкапсулируют его, а затем методы вызываются в класс wrapper/proxy/facade, которые вызывают методы инкапсулированных объектов.

Пожалуйста, покажите, почему они отличаются от примеров.

Спасибо

4b9b3361

Ответ 1

Разница в основном заключается в намерении. В конечном счете, все они "берут реализацию и завершают ее", но важно сообщить разницу.

Образец оболочки (так называемый шаблон адаптера) принимает один интерфейс и адаптирует его к другому.

interface A { void Foo(); }
interface B { void Bar(); }

class AAdapter : B { 
   private A a;
   public AAdapter(A a) { this.a = a; }

   void Bar() {
      a.Foo(); // just pretend foo and bar do the same thing
   } 
}

Прокси реализует интерфейс для обеспечения доступа к чему-то другому (обычно что-то большое). Хорошим примером являются удаленные вызовы процедур.

interface PiCalculator {
    double CalculatePi();
}

class Ec2PiCalculatorProxy : PiCalculator {
    public double CalculatePi() {
       // Fire up 10000 of computers in the cloud and calculate PI
    }
}

Мы называем это прокси, а не оболочкой, чтобы сообщить, что он туннелирует через другой компонент для выполнения результатов. Я не вижу этого так же, как шаблон адаптера, потому что это касается преобразования интерфейсов.

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

class Facade {
  private A a;
  private B b;

  // Provides an interface to A and B by delegating to these members  

  public void DoSomethingWithAAndB() {
    MagicToken x = a.DoSomethingAndGetAResult();
    b.DoSomethingWithMagic(x);
  } 
}

Ответ 2

Многие шаблоны проектирования имеют одинаковую структуру, как вы видели.

Разница заключается в причине их существования - о причине их существования.

Прокси-сервер должен действовать как локальный объект, представляющий удаленный.

Существует оболочка для переноса существующего объекта для расширения/изменения его поведения.

Фасад существует для упрощения сложного API и вместо него представляет собой простой.

Ответ 3

AFAIK нет шаблона, называемого оберткой. Это скорее похоже на общее определение одного из поведенческих моделей.

Фасад

Не переносите один класс, кроме нескольких. Цель состоит в том, чтобы упростить работу с сложным API. Пример .NET - это класс WebClient, который использует HttpWebRequest/HttpWebResponse

Proxy

Proxies действует как исходный объект, но содержит дополнительную логику, такую ​​как обработка соединения или очистка ресурсов по завершении.

Если вы используете WCF, вы можете создать клиентский прокси, предоставив сервисный интерфейс WCF.

Дополнительные шаблоны

Есть еще несколько шаблонов, которые также являются "обертки":

  • Адаптер
  • декоратор