设计模式之外观模式

外观模式

本质: 封装交互,简化调用

何时使用外观模式

相关模式

外观模式经典代码:

复制代码
package com.tao.design.facade;

/**
 * @projectName: DesignMode
 * @package: com.tao.design.facade
 * @className: ServiceA
 * @author: TT_Hugo
 * @description: TODO
 * @date: 2022/12/26 22:05
 * @version: 1.0
 */
public interface ServiceA {
    void methodA();
}

package com.tao.design.facade;

/**
 * @projectName: DesignMode
 * @package: com.tao.design.facade
 * @className: ServiceAImpl
 * @author: TT_Hugo
 * @description: TODO
 * @date: 2022/12/26 22:06
 * @version: 1.0
 */
public class ServiceAImpl implements ServiceA{
    @Override
    public void methodA() {
        System.out.println("这是服务A");
    }
}

package com.tao.design.facade;

/**
 * @projectName: DesignMode
 * @package: com.tao.design.facade
 * @className: ServiceB
 * @author: TT_Hugo
 * @description: TODO
 * @date: 2022/12/26 22:05
 * @version: 1.0
 */
public interface ServiceB {
    void methodB();
}

package com.tao.design.facade;

/**
 * @projectName: DesignMode
 * @package: com.tao.design.facade
 * @className: ServiceBImpl
 * @author: TT_Hugo
 * @description: TODO
 * @date: 2022/12/26 22:06
 * @version: 1.0
 */
public class ServiceBImpl implements ServiceB{
    @Override
    public void methodB() {
        System.out.println("这是服务B");
    }
}

package com.tao.design.facade;

/**
 * @projectName: DesignMode
 * @package: com.tao.design.facade
 * @className: ServiceC
 * @author: TT_Hugo
 * @description: TODO
 * @date: 2022/12/26 22:05
 * @version: 1.0
 */
public interface ServiceC {
    void methodC();
}

package com.tao.design.facade;

/**
 * @projectName: DesignMode
 * @package: com.tao.design.facade
 * @className: ServiceCImpl
 * @author: TT_Hugo
 * @description: TODO
 * @date: 2022/12/26 22:06
 * @version: 1.0
 */
public class ServiceCImpl implements ServiceC{
    @Override
    public void methodC() {
        System.out.println("这是服务C");
    }
}

门面类:将交互封装起来,简化使用者的调用

复制代码
package com.tao.design.facade;

/**
 * @projectName: DesignMode
 * @package: com.tao.design.facade
 * @className: Facade
 * @author: TT_Hugo
 * @description: TODO
 * @date: 2022/12/26 22:08
 * @version: 1.0
 */
public class Facade {
    ServiceA sa;
    ServiceB sb;
    ServiceC sc;

    public Facade() {
        sa = new ServiceAImpl();
        sb = new ServiceBImpl();
        sc = new ServiceCImpl();
    }

    public void methodA() {
        sa.methodA();
        sb.methodB();
    }

    public void methodB() {
        sb.methodB();
        sc.methodC();
    }

    public void methodC() {
        sc.methodC();
        sa.methodA();
    }
}

测试类

复制代码
package com.tao.design.facade;

/**
 * @Author Mi_Tao
 * @Date 2023/7/23
 * @Description
 * @Version 1.0
 **/
public class Client {
    public static void main(String[] args) {
        new Facade().methodA();
    }
}
相关推荐
黒亱中旳8 小时前
Java AI 框架三国杀:Solon AI vs Spring AI vs LangChain4j 深度对比
java·人工智能·spring
网络工程小王8 小时前
[智能对话系统架构设计文档]
java·系统架构·langraph
alxraves9 小时前
医用超声远程会诊系统:会诊平台的核心架构与功能解析
java·人工智能·架构
带刺的坐椅9 小时前
用 Solon AI ReActAgent 落地智能客服工单处理
java·ai·llm·agent·solon·react-agent
我是坏垠10 小时前
Crypto、Cipher与Password:Java加密开发的三个核心概念
java·开发语言·python
white_ant10 小时前
JDK LTS 版本升级迁移注意事项大全
java·开发语言
广州灵眸科技有限公司12 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) INI文件操作
java·前端·javascript·网络·人工智能
库克克12 小时前
【C++ 】内联函数
java·开发语言·c++
zh_xuan12 小时前
java 虚拟线程
java·开发语言·虚拟线程
jason成都12 小时前
RTKLIB Java 移植踩坑复盘:卡尔曼滤波核心逻辑修复与滑坡场景实测验证
java·开发语言