“门面设计模式”和Java接口(interface)在概念上是否相同?两者都通过提供表达复杂功能的简单方法来实现抽象。
我们可以说通过创建遵循Facade模式的界面吗?
最佳答案
不,我不一样。
对于实现外观设计,无需实现模式即可实现任何接口(interface)。作为示例,它只是提供了一个新层来与您的服务进行通信。
class ServiceFacade() {
private Service1 service1;
private Service2 service2;
public void update(Entity entity){
service1.update(entity);
service2.update(entity);
}
}
因此,它可以使您与所有相关服务进行通信。不用调用
service1.update()
和service2.update()
而是调用facade.update()
,因此您可以确保这两种服务都可以更新实体。再举一个例子:也许在更新
service
的所有时间中,您需要缓存的refresh()
。这也可以封装在您的Facade中:public void update(Entity entity) {
service.update(entity);
cache.refresh();
}
如果您的Facade类只有一个依赖项,但是您想扩展此依赖项的功能,则可以通过实现 Decorator模式来实现。这是您需要实现接口(interface)的地方。
让我们看下面的例子。假设您有一个
service
,并且想用一个简单的缓存对其进行扩展class CachedService implement Service {
private Service service;
CachedService(Service service, Cache cache){
......
}
......
private Entity get(Long id) {
Entity cachedEntity = cache.get(id);
if (cachedEntity != null){
return cachedEntity;
}
return service.get(id);
}
}