六、设计模式之门面模式【Facade】


在这里插入图片描述

创建型模式在这场战争中已经扫荡完成,在这个战略途中。我们南部战区已经把创建型的敌军全部歼灭。剩下开始进攻其他防线战区。主要针对结构型军队进行手术刀式打击。离我们占领敌军司令部,插上大旗不远了。同志们,想着胜利勇敢前进。炮火很猛,我们慢慢来。先解决 Facade门面模式 这个小喽喽练练手。

六、设计模式之门面模式【Facade】

也叫: 外观模式
在这里插入图片描述

所属类型定义
结构型要求一个子系统的外部和内部的通信必须通过一个统一的对象进行。

门面模式注重“统一的对象”,也就是子系统提供统一的访问接口,这让使用者不能通过其他方式访问子系统。


能帮我们干什么?

主要解决什么问题?

主要解决的是 解决接口的复用性和易用性之间的冲突
同时解决了

优缺点

优点
1. 减少各个系统的相互依赖
2. 提高灵活性
	> 依赖降低后,子系统的变化,不会影响facade
4. 提高了安全性
	> 访问控制
缺点:
  • 不符合开闭原则

使用的场景

  • 反腐层 【适配器+门面模式】
  • 对接第三方系统时
  • 有外部系统需要对接时,或外部包需要引入时。不希望外部的逻辑影响到内部的代码逻辑。

实现

«interface»
Facade
SubSystemClasses

角色

  1. Facade

    此角色知道子系统的所有功能和责任。并提供一些方法调用委托到相应的子系统。也就是说,该角色没有任何业务逻辑,只是一个委托类。

  2. subSystem 子系统角色

    子系统可以有多个子系统。可以有许多子系统暴露的类。但是子系统式不知道门面类的。有子系统内部决定暴露那些能力给门面类。

门面模式

实现难度: ⭐️ ⭐️

https://gitcode.net/k316378085/Java/-/tree/master/java/com/kongxiang/raindrop/dp/type/structure/facade

public class LolFacade {

    private AliSubSystemSdK subSystemSdK = new AliSubSystemSdK();

    private WecahtPay wecahtPay = new WecahtPay();
    /**
     * lol 十连抽奖
     */
    public void lolPd(){
        boolean b = wecahtPay.PrizeDraw();
        if(b) subSystemSdK.sendSend("短信通知:》》》 lol 十连抽奖 。。。 ");
    }

    public void recharge(long money){
        wecahtPay.recharge(money);
        subSystemSdK.sendSend("》》》充值了:" + money);
    }
}

测试方法

public class FacadeTest {

    @Test
    public void testFacade(){
        LolFacade lolFacade = new LolFacade();

        lolFacade.lolPd();

        lolFacade.recharge(1990);

        lolFacade.lolPd();
    }
}

总结

  1. 一个子系统可以有多个门面

    当门面已经变得臃肿时
    子系统可以提供不同访问路径

  2. 门面不参与子系统的逻辑,子系统不知道门面的存在
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘉羽很烦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值