"Facade设计模式"和Java界面在概念上是一样的吗?

Kau*_*ele 3 java design-patterns interface facade

"Facade设计模式"和Java界面在概念上是一样的吗?因为两者都通过提供表达复杂功能的简单方式来实现抽象.我们可以通过创建界面来说我们遵循Facade模式吗?

Ser*_*hyr 6

不,我不一样.对于实现Facade,设计模式不需要实现任何接口.作为示例,它仅提供与您的服务进行通信的新层.

class ServiceFacade() {
    private Service1 service1;
    private Service2 service2;

   public void update(Entity entity){
      service1.update(entity);
      service2.update(entity);
   }
}
Run Code Online (Sandbox Code Playgroud)

因此,它将为您提供与所有相关服务进行通信的一点.而不是打电话service1.update(),service2.update()你只是打电话facade.update(),所以你确定两个服务都更新实体.

还有一个例子:可能所有时间都已service更新,您需要refresh()缓存.这也可能包含在您的Facade中:

public void update(Entity entity) {
    service.update(entity);
    cache.refresh();
}
Run Code Online (Sandbox Code Playgroud)

如果您的facade类只有一个依赖项,但您希望扩展此依赖项的功能,则可以通过实现Decorator模式来实现.这是您需要实现接口的地方.我们来看看下面的例子.假设你有一个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);
    }
}
Run Code Online (Sandbox Code Playgroud)