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

热门文章

最新文章

  • 1
    C++一分钟之-设计模式:工厂模式与抽象工厂
    42
  • 2
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    46
  • 3
    C++一分钟之-C++中的设计模式:单例模式
    54
  • 4
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    38
  • 5
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    62
  • 6
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    57
  • 7
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    41
  • 8
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    50
  • 9
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    106
  • 10
    Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
    78