Java中的门面设计模式,非常有用!

Posted Java技术栈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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


例如在 中,当执行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就是一个典型的门面设计模式。

https://my.oschina.net/u/3441184/blog/889706

- END -

推荐阅读:
1、
2、
3、!
4、!
5、
关注 Java技术栈 公众号在后台回复: 设计模式 ,可获取一份栈长整理的最新 Java 设计模式干货。

点击「阅读原文」和栈长学更多~  

以上是关于Java中的门面设计模式,非常有用!的主要内容,如果未能解决你的问题,请参考以下文章

20个非常有用的Java程序片段

20个非常有用的Java程序片段

20个非常有用的Java程序片段

20个非常有用的Java程序片段

20个非常有用的Java程序片段

20个非常有用的Java程序片段