我通常会看到有些人像这样使用了立面。
public class FooFacade {
Foo foo;
public boolean isFunny(param1, param2) {
IsFunnyInput isFunnyInput = new IsFunnyInput(param1, param2);
return foo.isFunny(isFunnyInput);
}
}
这是一种正确的方法吗?我认为,它只是在包装中添加了另一个类。当您还可以直接使用 foo 进行相同操作时。
对我来说,这是装饰图案的一个示例,只有当Foo
和FooFacade
共享相同的接口时才有意义。
interface Foo { boolean isFunny(p1, p2); }
class FooFacade implements Foo { ... } // FooDecorator, actually
相反,在涉及几个不同类别(并隐藏此复杂性(的情况下,立面模式用于执行更复杂的相互作用。
包装器图案(又称适配器(意味着几个接口。
我通常会使用A 幕墙隐藏其他第三方库或某些复杂子系统的内部实现详细信息和类。如果IsFunnyInput
-类来自另一个库或一个子模块,则立面将帮助您轻松切换库或更改某些实现详细信息,因为它由立面包裹,并且您所有的代码都将使用立式。如果您只想将自己简单地纳入立面的自写课程,而没有其他课程,那么我看不到任何真正的好处!
这是对立面设计模式的非常好的解释