设计模式之外观模式

外观模式

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

何时使用外观模式

相关模式

外观模式经典代码:

复制代码
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();
    }
}
相关推荐
45288655上山打老虎29 分钟前
C++完美转发
java·jvm·c++
Seven9730 分钟前
查找算法
java
毕设源码-朱学姐2 小时前
【开题答辩全过程】以 公务员考试在线测试系统为例,包含答辩的问题和答案
java
serendipity_hky2 小时前
【SpringCloud | 第2篇】OpenFeign远程调用
java·后端·spring·spring cloud·openfeign
RwTo2 小时前
【源码】-Java线程池ThreadPool
java·开发语言
SadSunset2 小时前
(15)抽象工厂模式(了解)
java·笔记·后端·spring·抽象工厂模式
兮动人2 小时前
EMT4J定制规则版:Java 8→17迁移兼容性检测与规则优化实战
java·开发语言·emt4j
一点★2 小时前
Java中的常量池和字符串常量池
java·开发语言
问君能有几多愁~2 小时前
C++ 日志实现
java·前端·c++
菜鸟plus+2 小时前
Java 接口的演变
java·开发语言