设计模式~门面模式-05

21 篇文章 0 订阅
2 篇文章 0 订阅

门面模式

优点

缺点

使用场景


        要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。

        【我有一个专业的Nikon相机,我就喜欢自己手动调光圈、快门,这样照出来的照片才专业,但MM可不懂这些,教了半天也不会。幸好相机有Facade设计模式,把相机调整到自动档,只要对准目标按快门就行了,一切由相机自动调整,这样M M也可以用这个相机给我拍张照片了。门面模式:外部与一个子系统的通信必须通过一个统一的门面对象进行。

        门面模式提供一个高层次的接口,使得子系统更易于使用。每一个子系统只有一个门面类,而且此门面类只有一个实例,也就是说它是一个单例模式。但整个系统可以有多个门面类。】

@Slf4j
public class SubsystemA {
    //业务逻辑A
    public void doSomethingA() {
        log.info("{}的业务逻辑。", this.getClass().getSimpleName());
    }
}
@Slf4j
public class SubsystemB {
    //业务逻辑B
    public void doSomethingB() {
        log.info("{}的业务逻辑。", this.getClass().getSimpleName());
    }
}
@Slf4j
public class SubsystemC {
    //业务逻辑C
    public void doSomethingC() {
        log.info("{}的业务逻辑。", this.getClass().getSimpleName());
    }
}
@Slf4j
public class Facade {
    //被委托的对象
    private SubsystemA subsystemA = new SubsystemA();
    private SubsystemB subsystemB = new SubsystemB();
    private SubsystemC subsystemC = new SubsystemC();
   //提供给外部访问的方法
    public void businessA() {
        this.subsystemA.doSomethingA();
    }
    public void businessB() {
        this.subsystemB.doSomethingB();
    }
    public void businessC() {
        this.subsystemC.doSomethingC();
    }
}
@Slf4j
public class Client {
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.businessA();
        facade.businessB();
        facade.businessC();
    }
}

优点

        减少系统的相互依赖:门面模式可以让场景类只需要依赖门面对象,而与子系统无关。因此可以降低系统耦合。

       提高灵活性:以来减少了,不管子系统内部如何变化,只要不修改门面对象的对外接口就行,提高了灵活性。

        提高安全性:外部只能通过门面访问子系统的功能,门面没有开放的就不能访问,提高了子系统的安全性。

缺点

        门面模式最大的缺点是不符合开闭原则。系统投产后,一旦发现错误,九比西药修改门面角色的代码,风险比较大。

使用场景

        当一个复杂的系统模块或者子系统需要向外界提供一个访问接口的时候。

        子系统相对独立——其他(子)系统对该系统的访问只需要黑箱操作,不需要关注内部实现细节。

        预防低水平人员带来的风险扩散:为降低个人代码质量对整体项目的影响风险,一般指定相关人员在特定的子系统中进行开发,然后提供门面接口进行访问操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

唐曌

谢谢支持

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

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

打赏作者

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

抵扣说明:

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

余额充值