使用Facade就像一个包装器

时间:2018-04-26 17:14:44

标签: java design-patterns wrapper anti-patterns facade

我经常看到有些人使用这样的门面。

public class FooFacade {
   Foo foo;

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

这是一种正确的方法吗?在我看来,它只是在包中添加了一个类。当你也可以直接使用 Foo 来做同样的事情。

2 个答案:

答案 0 :(得分:1)

对我而言,这是the decorator pattern的一个示例,只有当WITHFoo共享相同的界面时才有意义。

FooFacade

相比之下,the Facade pattern用于执行更复杂的交互,其中涉及几个不同的类(并隐藏这种复杂性)。

The Wrapper pattern (aka Adapter)意味着几个接口。

答案 1 :(得分:0)

我通常会使用 Facade 隐藏内部实现细节和类,例如另一个第三方库或某些复杂子系统。如果IsFunnyInput - Class来自另一个库或一个子模块,那么Facade将帮助您轻松切换库或更改一些实现细节,因为它由外观包装,并且您的所有代码都将使用外观。 如果您只是将自己编写的课程简单地包装到一个外观而没有涉及其他课程,我认为没有任何实际的好处!

Here is a really good explanation of the Facade Design pattern