设计模式-外观模式

声明: 此文章仅限于记录学习之用 , 受限于自身水平和理解能力 , 因此结论可能是不正确的. 如果您需要学习,建议参考其他文章

介绍

比如你在启动电脑时,只需要按一下开关就可以使用了.
电脑内部启动cpu,启动ram,启动rom,加载系统…这些不需要关心.
开关就是外观模式,
下面用一张图来表达,外观模式干的什么
在这里插入图片描述

优点

调用者只需要关心要什么, 不需要关心内部实现.

使用场景

提供给第三方接口. 可以根据交互场景提供接口, 内部实现不需要对方知道. 更加清晰明了.

示例代码

下面以聚合支付为例.

1.定义支付接口

package com.demo;

/**
 * 互联网支付
 */
public interface InternetPayMent {
    /**
     * 支付
     * 演示模式, 无需在意类型
     * @param money 金额
     * @return 返回结果
     */
    String pay(int money);

}

  1. 支付实现类
package com.demo;

/**
 * @author Administrator
 * @version 1.0
 * @description: 支付宝
 * @date 2023/11/3 10:28
 */
public class AliPay implements InternetPayMent{
    @Override
    public String pay(int money) {
        return "欢迎使用支付宝, 本次支付:"+money+"元";
    }
}



package com.demo;

/**
 * @author Administrator
 * @version 1.0
 * @description: 微信支付
 * @date 2023/11/3 10:28
 */
public class WeChatPay implements InternetPayMent{
    @Override
    public String pay(int money) {
        return "欢迎使用微信支付, 本次支付:"+money+"元";
    }
}


package com.demo;

/**
 * @author Administrator
 * @version 1.0
 * @description: 云闪付
 * @date 2023/11/3 10:28
 */
public class UnionPay implements InternetPayMent{
    @Override
    public String pay(int money) {
        return "欢迎使用云闪付, 本次支付:"+money+"元";
    }
}

3.外观模式

package com.demo;

/**
 * @author Administrator
 * @version 1.0
 * @description: 外观模式
 * @date 2023/11/3 10:56
 */
public class PanmentPayFacade {
    private AliPay aliPay;
    private WeChatPay weChatPay;
    private  UnionPay unionPay;
    public PanmentPayFacade(){
        aliPay=new AliPay();
        weChatPay=new WeChatPay();
        unionPay=new UnionPay();
    }
    public String payByAliPay(int money){
       return aliPay.pay(money);
    }
    public String payByWeChatPay(int money){
        return weChatPay.pay(money);
    }
    public String payByUnionPay(int money){
        return unionPay.pay(money);
    }
}

4.测试类

package com.demo;

/**
 * @author Administrator
 * @version 1.0
 * @description:
 * @date 2023/11/3 11:04
 */
public class Main {
    public static void main(String[] args) {
        PanmentPayFacade panmentPayFacade = new PanmentPayFacade();
        System.out.println(panmentPayFacade.payByAliPay(200));
        System.out.println(panmentPayFacade.payByUnionPay(200));
        System.out.println(panmentPayFacade.payByWeChatPay(20));
    }
}

总结

外观模式就是在原来的基础上, 又包了一层, 这以层负责将需要调用的服务集合在一块, 这样做降低了代码的复杂性,提高了灵活性.

参考资料

https://refactoringguru.cn/design-patterns/facade
https://www.runoob.com/design-pattern/facade-pattern.html
https://shusheng007.top/2021/09/08/facade-pattern/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值