Kau*_*ele 3 java design-patterns interface facade
"Facade设计模式"和Java界面在概念上是一样的吗?因为两者都通过提供表达复杂功能的简单方式来实现抽象.我们可以通过创建界面来说我们遵循Facade模式吗?
不,我不一样.对于实现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)