深度学习设计模式之外观模式

文章目录


前言

外观模式是结构型设计模式,定义一个高层接口,用来访问子系统中的众多接口,使系统更加容易使用。


一、介绍

外观设计模式(Facade Pattern)是一种常用的设计模式,属于结构型模式之一。它提供了一个统一的接口来访问一个子系统中的一组接口,从而隐藏子系统的复杂性,让子系统更容易使用。

二、特点

  • 简化接口:为复杂的子系统提供一个简化的方法来访问它的功能。
  • 隐藏复杂性:隐藏子系统内部的复杂逻辑和实现细节,客户端不需要了解内部的复杂结构。
  • 子系统独立性:Facade 不会强制子系统进行修改以符合新的接口,它们可以独立地变化和发展。
  • 灵活性:通过引入 Facade,可以很容易地添加或修改子系统的功能,同时保持客户端代码的稳定性。
  • 松耦合:Facade 模式降低了客户端与复杂子系统之间的耦合度。

三、详细分析

1.核心组成

外观角色(Facade):客户端可以调用这个角色的方法, 这个外观方法知道多个子系统的功能和实际调用。

子系统角色(SubSystem):每个子系统都可以被客户端 直接调用,子系统并不不知道门面的存在。

2.代码示例

外观角色抽象接口类

java 复制代码
/**
 * 外观角色抽象类
 */
public interface LoginSDK {

    void login();
}

外观角色实现类

java 复制代码
/**
 * 外观角色实现类
 */
public class LoginImpl implements LoginSDK {

    /**
     * 日志服务
     */
    private LogService logService = new LogService();

    /**
     * 用户服务
     */
    private UserService userService = new UserService();
    /**
     * 短信服务
     */
    private SmsService smsService = new SmsService();

    @Override
    public void login() {
        System.out.println("用户登录成功");
        logService.log();
        userService.userInfo();
        smsService.sendMessage();

    }

}

子系统角色

java 复制代码
/**
 * 日志子系统
 */
public class LogService {

    public void log(){
        System.out.println("记录操作日志");
    }

}
java 复制代码
/**
 * 短信子系统
 */
public class SmsService {

    public void sendMessage(){
        System.out.println("发送消息提醒!");
    }

}
java 复制代码
/**
 * 用户子系统
 */
public class UserService {

    public void userInfo(){
        System.out.println("查询用户权限等相关信息");
    }

}

外观设计模式测试类

java 复制代码
/**
 * 测试类
 */
public class FacadeTest {

    public static void main(String[] args) {
        LoginSDK loginSDK = new LoginImpl();
        loginSDK.login();
    }

}

结果

3.优缺点

优点

  • 减少系统相互依赖,提高灵活性。

  • 符合迪米特法则,一个实体应当尽可能的少与其他实体之间发生相互作用。

缺点

  • 增加系统调用链路。

4.使用场景

  1. 当需要向客户端提供一个简单接口来访问复杂系统中的一组操作时。
  2. 当需要为复杂的类层次结构提供一个简单接口时。
  3. 当需要通过一个中间层来简化客户端与复杂系统的交互时。

总结

外观设计模式在实际开发中非常有用,特别是在处理大型复杂系统时,它可以帮助我们简化客户端的交互过程,提高系统的可维护性和可扩展性。

相关推荐
Kel7 分钟前
Claude Code 架构深度剖析:从终端输入到大模型响应的完整过程
人工智能·设计模式·架构
￰meteor4 小时前
23种设计模式 -【观察者】
设计模式
妙蛙种子3116 小时前
【Java设计模式 | 创建者模式】 抽象工厂模式
java·开发语言·后端·设计模式·抽象工厂模式
怨言.7 小时前
设计模式之模板方法模式
设计模式·模板方法模式
无籽西瓜a7 小时前
【西瓜带你学设计模式 | 第十四期 - 享元模式】享元模式 —— 内外状态分离与对象共享实现、优缺点与适用场景
java·设计模式·软件工程·享元模式
七夜zippoe8 小时前
设计模式在Spring等框架中的应用:模板方法、工厂、适配器等
java·spring·设计模式·模板·适配器·工厂
panzer_maus9 小时前
工厂模式、代理模式与单例模式的介绍
java·设计模式·代理模式
糟糕好吃1 天前
AI 全流程解析(LLM / Token / Context / RAG / Prompt / Tool / Skill / Agent)
前端·后端·设计模式
kvo7f2JTy1 天前
JAVA 设计模式
java·开发语言·设计模式
程序员小寒1 天前
JavaScript设计模式(九):工厂模式实现与应用
开发语言·前端·javascript·设计模式