设计模式之外观模式
外观模式的简单介绍
外观模式,可以简单地理解为系统的门面,也就是说,通过外观模式,将系统内部的交互、操作屏蔽起来,而对外提供比较简单的门面对象,通过这种方式,可以隐藏系统的复杂性,使得外部对象更加方面地与系统进行交互。
外观模式的具体实现
这里通过一个简单的到酒店订房间的案例,来更加深入的理解外观模式。
假如酒店前台的接应,那么我们去酒店订房间的时候,可能需要以下操作:查看空闲房间,从空闲房间中选择一个,通知清洁工进行打扫卫生,入住
/**
* 订票系统
*/
class BookSystem{
public void getFreeRoom(){
System.out.println("查找空闲房间");
}
public void bookRoom(){
System.out.println("选择对应的房间");
}
}
/**
* 清洁工
*/
class Cleaner{
public void clean(){
System.out.println("打扫房间");
}
}
// 订房步骤
BookSystem bookSystem = new BookSystem();
Cleaner cleaner = new Cleaner();
bookSystem.getFreeRoom();
bookSystem.bookRoom();
cleaner.clean();
从上面的代码中可以看出,当没有前台服务的时候,我们需要了解整个订房的流程,当这些流程发生变化的时候,比如先打扫卫生,在选择房间等,作为使用者就很困惑了,而且,这种直接跟系统进行交互直接将系统的操作暴露出来,除了使得操作麻烦之外,还使得系统变得更加不安全。
接下来来看下增加了前台接应,也就是我们的外观模式的应用之后
// 复用前面的BookSystem类以及Cleaner类
class Hotel{
private BookSystem bookSystem = new BookSystem();
private Cleaner cleaner = new Cleaner();
public void service(){
bookSystem.getFreeRoom();
bookSystem.bookRoom();
cleaner.clean();
}
}
可以看到,现在如果我们想要订房间,只需要通过酒店的service,也就是前台即可,而不需要关系其内部的运行细节
总结
外观模式,也是一种比较常用的设计模式,主要用于对系统内部一些操作进行封装,使得外部调用者无需关心系统内部的操作流程等信息就可以方便地跟该系统进行交互