个人公众号【爱做梦的锤子】,全网同id,个站 http://te-amo.site,欢迎关注,里面会分享更多有用知识,还有我的私密照片
文章中部分定义和解释性文字,都是引用百度百科,主要的代码及场景应用为本人原创
外观模式,为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。
场景:系统有个清理的任务,需要清理三个地方的缓存:本地缓存,数据库缓存,FTP服务器缓存。如果让客户端直接调用三个清理系统,耦合性太高,不便于以后扩展,所以可以使用外观模式。
结果
- Facade:外观类为子系统提供一个共同的对外接口(Clean)
- Clients:客户对象通过一个外观接口读写子系统中各接口的数据资源。(Main)
设计
实现
代码地址:https://github.com/telundusiji/designpattern
数据库清理
@Slf4j
public class DBClean {
public void clean(){
log.info("数据库缓存清理成功");
}
}
FTP服务器清理
@Slf4j
public class FtpClean {
public void clean(){
log.info("Ftp缓存清理成功");
}
}
本地清理
@Slf4j
public class LocalClean {
public void clean(){
log.info("本地缓存清理成功");
}
}
清理外观类
public class Clean {
private DBClean dbClean;
private FtpClean ftpClean;
private LocalClean localClean;
public Clean(){
dbClean = new DBClean();
ftpClean = new FtpClean();
localClean = new LocalClean();
}
public void clean(){
dbClean.clean();
localClean.clean();
ftpClean.clean();
}
}
优点
- 实现了子系统与客户端之间的松耦合关系。
- 客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。
经典应用
SLF4J(Simple Logging Facade for Java)就是一个外观模式的实际应用。
想了解更多可以去查询SLF4J相关资料
个人公众号【爱做梦的锤子】,全网同id,个站 http://te-amo.site,欢迎关注,里面会分享更多有用知识,还有我的私密照片