设计模式之外观模式

外观模式

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

何时使用外观模式

相关模式

外观模式经典代码:

复制代码
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();
    }
}
相关推荐
2302_8057710724 分钟前
Day23:POM设计模式(封装)
java·开发语言·设计模式
SL_staff26 分钟前
APS降本增效的关键:在JVS中实现‘人-机-料-法-环’全要素耦合调度
java·github·全栈
十年Java程序媛27 分钟前
Java String、StringBuilder、StringBuffer 底层原理|字符串拼接性能与线程安全
java·开发语言·spring boot·安全·面试
SamDeepThinking36 分钟前
CyclicBarrier的底层实现
java·后端·面试
我是人✓37 分钟前
SpringMVC异常处理与拦截器实战揭秘
java·开发语言·后端
阿狗童鞋1 小时前
SpringSecurity权限认证实战指南
java·后端·spring
Wang's Blog1 小时前
Java 项目部署之 Docker工具快速入门: 学习路径与命令速查导引
java·学习·docker
Wang's Blog1 小时前
Java 项目部署之 Docker工具快速入门: Docker 镜像仓库
java·docker
企智汇-项目管理软件1 小时前
离散制造管理系统怎么选?一套系统管住从研发到交付的全周期
java·人工智能·制造·项目经理·项目管理软件·项目管理系统·项目管理软件工程
IT研究室2 小时前
最新计算机毕业设计选题推荐-基于spring boot的幼儿园管理系统-网站-文档指导-Java-springboot
java·spring boot·课程设计