设计模式-外观模式

设计模式-外观模式

外观模式(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. 分布式服务调用: 在微服务架构中,可以创建一个服务网关,它作为一个统一的服务调用入口,负责转发客户端的请求到后端不同的微服务,并合并返回结果,从而简化客户端调用多个服务接口的复杂性
相关推荐
Rockbrook2 小时前
户外装备品牌实力企业
外观模式
日和雫4 小时前
封装、继承、多态 & 组合,为什么组合大于继承?
设计模式
代钦塔拉6 小时前
【C++/Qt 进阶】设计模式系列(6):桥接模式——把“两个独立变化的维度“拆开
c++·qt·设计模式
haluhalu.6 小时前
深入理解AIAgent(1.3)--- 设计模式
人工智能·python·设计模式·langchain
高晶1 天前
CANopen 在 BMS 系统中的 C 语言实战指南
设计模式·程序员
博风1 天前
13、设计模式应用举例:工厂方法模式:创建药品对象
设计模式·工厂方法模式
代钦塔拉1 天前
【C++/Qt 进阶】设计模式系列(5):适配器模式——给“不兼容的接口“贴一层翻译膜
c++·qt·设计模式
bigbread2 天前
策略模式 + 工厂方法模式在项目中的实战应用
设计模式
高晶2 天前
C 语言实现 BMS 系统中 SPI 通信协议实战指南
设计模式·程序员
代钦塔拉2 天前
【C++/Qt 进阶】设计模式系列(2):工厂模式——从游戏角色到披萨店
c++·算法·设计模式