Используя Фасад Как обертка - PullRequest
0 голосов
/ 26 апреля 2018

Я обычно вижу, что некоторые люди использовали фасад таким образом.

public class FooFacade {
   Foo foo;

   public boolean isFunny(param1, param2) {
       IsFunnyInput isFunnyInput = new IsFunnyInput(param1, param2);
       return foo.isFunny(isFunnyInput);
   }
}

Это правильный подход? На мой взгляд, это просто добавление еще одного класса в пакет. Когда вы также можете напрямую использовать Foo , чтобы сделать то же самое.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Я бы обычно использовал Фасад , чтобы скрыть внутренние детали реализации и классы, используемые, например, другой сторонней библиотекой или какой-либо сложной подсистемой. Если класс IsFunnyInput из другой библиотеки или одного субмодуля, фасад поможет вам легко переключить библиотеку или изменить некоторые детали реализации, поскольку она обернута фасадом, и весь ваш код будет использовать фасад. Если вы просто собираетесь обернуть свои написанные сами по себе классы в фасад без участия дополнительных классов, я не вижу никакой реальной выгоды!

Вот действительно хорошее объяснение шаблона Facade Design

0 голосов
/ 26 апреля 2018

Для меня это пример шаблона декоратора , и он имеет смысл, только если Foo и FooFacade используют один и тот же интерфейс.

interface Foo { boolean isFunny(p1, p2); }
class FooFacade implements Foo { ... } // FooDecorator, actually

Напротив, шаблон Фасада используется для выполнения более сложных взаимодействий, где задействовано несколько разных классов (и для того, чтобы скрыть эту сложность).

Шаблон Wrapper (он же Adapter) подразумевает несколько интерфейсов.

...