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

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

www.zeeklog.com  - Java中的门面设计模式及如何用代码实现

Read more

LibreChat 集成 Stripe 支付的奶妈级教程

LibreChat 集成 Stripe 支付的奶妈级教程

我们假设你已经熟悉基本的 React 和 Node.js 开发,并且正在使用 LibreChat 的默认技术栈(React 前端、Node.js 后端、Vite 构建工具,可能还有 Electron 桌面应用)。教程会特别考虑 Electron 环境下的适配问题(例如 macOS 中文路径或路由错误)。“奶妈级”带你从零开始实现支付功能(包括一次性支付和添加高级会员订阅) 教程目标 * 在 LibreChat 中添加支付页面,支持用户通过信用卡付款。 * 实现 Stripe 的一次性支付功能。 * (可选)扩展到订阅功能,管理高级会员状态。 * 解决 Electron 环境下的常见问题(如路由和路径解析)。 * 生成可公开推送的 Markdown 教程,方便社区参考。 前提条件 在开始之前,请确保你已准备好以下内容:

By Ne0inhk
超棒的雅思资源!

超棒的雅思资源!

雅思真题材料地址: https://github.com/zeeklog/IETLS 感谢所有人。材料来自:@shah0150 & @kbtxwer * 超棒的雅思资源 * 雅思简介 * 听力 * 阅读 * 写作 * 口语 * 词汇 * 其他 * YouTube 频道 * [播客] (#podcasts) 雅思简介 * 什么是雅思 - 了解什么是雅思 听力 * 高级听力 * 雅思官方网站 * 考试英语 * 英国广播公司节目 * 乔治梅森大学口音学习网站 - 学习不同的口音 * 英国广播公司播客 * 英国文化协会听力练习 阅读 * 雅思提升阅读 写作 * 雅思提升写作 * 雅思从 6 分到 9 分 * 迷你雅思 口语 * Verbling 提供在线英语家教服务

By Ne0inhk