设计模式-外观模式

设计模式-外观模式

外观模式(Facade Pattern)是一种结构型设计模式,它的主要目的是为子系统中的一组接口提供一个统一的、更高级别的接口。这个高级接口使得子系统的使用变得更加简单,并且隐藏了子系统内部的复杂性。

代码结构图:

外观模式代码示例:

java 复制代码
/**
 * 系统类
 */
public class SubSystem {
    static class SubSystemOne{
        public void methodOne(){
            System.out.println("子系统方法1");
        }
    }

    static class SubSystemTwo{
        public void methodTwo(){
            System.out.println("子系统方法2");
        }
    }

    static class SubSystemThree{
        public void methodThree(){
            System.out.println("子系统方法3");
        }
    }

    static class SubSystemFour{
        public void methodFour(){
            System.out.println("子系统方法4");
        }
    }


}
java 复制代码
/**
 * 外观类
 */
public class Facade {

    private SubSystem.SubSystemOne subSystemOne;
    private SubSystem.SubSystemTwo subSystemTwo;
    private SubSystem.SubSystemThree subSystemThree;
    private SubSystem.SubSystemFour subSystemFour;

    public Facade() {
        subSystemOne = new SubSystem.SubSystemOne();
        subSystemTwo = new SubSystem.SubSystemTwo();
        subSystemThree = new SubSystem.SubSystemThree();
        subSystemFour = new SubSystem.SubSystemFour();
    }

    public void methodA(){
        subSystemOne.methodOne();
        subSystemTwo.methodTwo();
        subSystemThree.methodThree();
        subSystemFour.methodFour();
    }

    public void methodB(){
        subSystemOne.methodOne();
        subSystemFour.methodFour();
    }
}
java 复制代码
/**
 * 外观模式客户端
 */
public class AppearanceDemo {
    public static void main(String[] args) {
        // 创建外观类
        Facade facade = new Facade();
        // 调用封装好的系统方法A
        facade.methodA();

        System.out.println("=== === === ===");

        // 调用封装好的系统方法B
        facade.methodB();
    }
}

实际应用场景:

  1. 用户界面(UI)模块: 在GUI应用程序中,通常会有一个主窗口类作为外观角色,它封装了对菜单、工具栏、状态栏等多个组件的操作。用户只需要与主窗口交互,而无需了解内部各个组件的具体实现细节。
  2. 数据库访问 : 数据访问层可能会设计一个数据访问的外观类,该类提供诸如save()update()delete()find()等简单易用的方法,而这些方法内部调用了复杂的SQL查询、事务管理、连接池操作等子系统的功能。
  3. 复杂系统集成: 当系统由多个子系统组成时,可以通过外观模式来为外部用户提供一个统一且简化的接口。例如,在企业级应用中,可能有订单处理子系统、库存管理子系统、物流配送子系统等,可以创建一个订单服务外观类,对外提供下单、取消订单、查询订单状态等功能,而内部则协调不同子系统完成相关操作。
  4. 跨平台API: 有些框架或库为了简化跨平台使用,提供了统一的API外观,隐藏了不同操作系统下特定的实现差异。例如,多媒体处理库可能通过外观模式将音频播放、视频录制等底层操作包装成一致的方法。
  5. 网络请求 : 在进行HTTP请求、文件上传下载等操作时,可以创建一个网络请求外观类,对外只提供几个简单的API如sendRequest()downloadFile(),而内部则处理了网络连接建立、数据序列化/反序列化、错误处理等多种复杂的步骤。
  6. 分布式服务调用: 在微服务架构中,可以创建一个服务网关,它作为一个统一的服务调用入口,负责转发客户端的请求到后端不同的微服务,并合并返回结果,从而简化客户端调用多个服务接口的复杂性

骤。

  1. 分布式服务调用: 在微服务架构中,可以创建一个服务网关,它作为一个统一的服务调用入口,负责转发客户端的请求到后端不同的微服务,并合并返回结果,从而简化客户端调用多个服务接口的复杂性
相关推荐
晨米酱13 小时前
JavaScript 中"对象即函数"设计模式
前端·设计模式
数据智能老司机18 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机19 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机19 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机19 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
使一颗心免于哀伤19 小时前
《设计模式之禅》笔记摘录 - 21.状态模式
笔记·设计模式
数据智能老司机2 天前
精通 Python 设计模式——创建型设计模式
python·设计模式·架构
数据智能老司机2 天前
精通 Python 设计模式——SOLID 原则
python·设计模式·架构
烛阴2 天前
【TS 设计模式完全指南】懒加载、缓存与权限控制:代理模式在 TypeScript 中的三大妙用
javascript·设计模式·typescript
李广坤2 天前
工厂模式
设计模式