“门面设计模式”和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);
    }
}

10-07 20:02