设计模式~门面模式-05

简介: 门面模式优点缺点使用场景

门面模式

优点

缺点

使用场景


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

       【我有一个专业的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();
    }
}

优点

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

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

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

缺点

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

使用场景

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

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

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


目录
相关文章
|
设计模式 算法
设计模式7 - 门面模式【Facade Pattern】
设计模式7 - 门面模式【Facade Pattern】
66 1
|
设计模式 算法 C++
设计模式之门面模式(C++)
设计模式之门面模式(C++)
|
8月前
|
设计模式 Java 应用服务中间件
设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
72 1
|
8月前
|
设计模式
设计模式 | 门面模式 Facade
设计模式 | 门面模式 Facade
59 0
|
8月前
|
设计模式 传感器
将设计模式门面模式运用到生活当中
将设计模式门面模式运用到生活当中
|
设计模式
设计模式系列教程(10) - 外观模式(门面模式)
设计模式系列教程(10) - 外观模式(门面模式)
114 0
|
设计模式 Java
设计模式~门面(外观)模式(Facade)-08
目录 (1)优点 (2)缺点 (3)使用场景 (4)注意事项: (5)应用实例: (6)源码中的经典应用 代码 外观模式(Fac
70 0
|
设计模式
设计模式 | 门面模式 Facade
设计模式 | 门面模式 Facade
77 0
|
设计模式 Python
Python:设计模式之门面模式
Python:设计模式之门面模式
94 0
|
设计模式 程序员 Go
Go设计模式(15)-门面模式
门面模式也叫外观模式,英文为 Facade Design Pattern。门面模式为子系统提供一组统一的接口,定义一组高层接口让子系统更易用。 门面模式的思想更常用在架构设计上,在编写代码层面大家很少提门面模式,但却一直在默默的使用。