Java中的门面设计模式及如何用代码实现

门面设计模式
门面设计模式又叫外观设计模式,其核心思想正如其字面意思,向用户提供一个门户,用户只需要访问这个门户来获取他们想要的数据,无需管理这个门户内部的构成,也无需知道里面的运行流程等等,对于开发者来说,使用门面模式,我们可以只向用户提供他们想要的东西,而不要暴露所有的信息。
日常生活中的例子
大家都知道,一个电脑的主机是由很多部件组成的,比较重要的有显卡、主板、网卡、声卡等。
代码实现
主板的启动和关闭
public class MainBoard {
public void start(){
System.out.println("main board is open");
}
public void end(){
System.out.println("main board is close");
}
}
显卡的启动和关闭
public class VideoCard {
public void start(){
System.out.println("video card is open");
}
public void end(){
System.out.println("video card is close");
}
}
网卡的启动和关闭
public class NetCard {
public void start(){
System.out.println("net card is open");
}
public void end(){
System.out.println("net card is close");
}
}
将上面的操作封装到一个门面之中
public class FacadeInstall {
private MainBoard mainBoard;
private NetCard netCard;
private VideoCard videoCard;
public FacadeInstall(){
mainBoard = new MainBoard();
netCard = new NetCard();
videoCard = new VideoCard();
}
public void start(){
mainBoard.start();
netCard.start();
videoCard.start();
}
}
测试类
public class FacadeTest {
public static void main(String[] args) {
FacadeInstall facadeInstall = new FacadeInstall();
facadeInstall.start();
}
}
运行结果
main board is open
net card is open
video card is open
在Java中的应用
例如在Java中,当执行doGet或者doPost的时候,其中的参数request和response已经是门面类,因为Tomcat在这之前会调用:
filterChain.doFilter(request.getRequest(), response.getResponse())
而这两个参数的源码如下:
public HttpServletRequest getRequest() {
if (facade == null) {
facade = new RequestFacade(this);
}
return facade;
}
public HttpServletResponse getResponse() {
if (facade == null) {
facade = new ResponseFacade(this);
}
return (facade);
}
其实门面设计模式使用还是比较广泛的,如果Shiro的核心组件SecurityManager就是一个典型的门面设计模式。
作者:Mazin
https://my.oschina.net/u/3441184/blog/889706