• 小侃设计模式(十)-外观模式


    1.概述

    外观模式(Facade Pattern)为子系统中的接口提供了一个统一接口,用来访问子系统中的一组接口,这个模式定义了一个高层接口,该接口使得客户端调用系统更加地方便。外观模式主要通过定义一个接口,屏蔽内部子系统的细节,使得调用端只和这个接口发生调用,而无须关系系统的内部细节。外观模式是结构型模式的一种,本文将分析外观模式的原理及使用方式。

    2.原理及使用

    2.1 原理

    外观模式又叫门面模式,它的类图主要如下所示:
    在这里插入图片描述
    它的主要角色包括:

    1.抽象接口(FacadeInterface):该接口是抽象的一个高层接口,规范了对外的调用方法;
    2.外观角色(Facade):该类是抽象接口(FacadeInterface)的具体实现,内部实现了对子系统的具体调用,客户端可以调用这个角色的方法来完成对子系统内一组功能的操作;
    3.子系统角色(SubSystem):每一个子系统都是一个单独的类,也可以是一个类的集合,实现了子系统具体的功能,每一个子系统都可以直接被客户端调用,也可以被外观角色直接调用,外观角色对于子系统来说就是一个客户端。

    注意:在JAVA语言中,FacaeInterface这个接口其实并不是必须的,对于不同的客户端,可能需求也是不同,无法提供统一的接口对所有的客户端,客户端真正关系的还是所调用的外观角色(Facade),因此上述类图可以直接进行缩减成如下模式:

    在这里插入图片描述

    2.2 案例

    针对上述类图的代码如下:

    public class Facade
    {
        private SubSystemA subSystemA = new SubSystemA();
        private SubSystemB subSystemB = new SubSystemB();
        private SubSystemC subSystemC = new SubSystemC();
    
        public void method()
        {
            subSystemA.method();
            subSystemB.method();
            subSystemC.method();
        }
    }
    
    public class SubSystemA
    {
        public void method()
        {
            System.out.println("子系统A");
        }
    }
    
    public class SubSystemB
    {
        public void method()
        {
            System.out.println("子系统B");
        }
    }
    
    public class SubSystemC
    {
        public void method()
        {
            System.out.println("子系统C");
        }
    }
    
    //测试代码如下
    public class Test {
    
        public static void main(String[] args) {
    		Facade facade = new Facade();
            facade.method();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    3.小结

    1.外观模式对外展蔽了子系统的细节,因此外观模式降低了客户端对子系统使用的复杂性;
    2.外观模式对客户端与子系统的耦合关系,让子系统内部的模块更易维护和扩展,通过合理的使用外观模式,可以帮我们更好的划分访问的层次;
    3.当系统需要进行分层设计时,可以考虑使用Facade模式;
    4.不能过多的或者不合理的使用外观模式,需要根据场景选择使用外观模式,不应为了使用模式而使用,大道至简;
    5.外观模式是相对简单的一种设计模式。

    4.参考文献

    1.《设计模式-可复用面向对象软件的基础》-Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides
    2.《可复用物联网Web3D框架的设计与实现》-程亮(知网)
    3.https://www.bilibili.com/video/BV1G4411c7N4-尚硅谷设计模式

  • 相关阅读:
    猿创征文|Vue、React可视化分析
    class12:async 和 await
    西南科技大学模拟电子技术实验四(集成运算放大器的线性应用)预习报告
    替代MySQL半同步复制,Meta技术团队推出MySQL Raft共识引擎
    【Java】Vert.x Jackson 序列化后日期数据正常展示
    vue 图片裁剪并回传显示
    群硕入列FoodTalks优质供应商地图数字化板块
    【历史版本火狐浏览器下载】
    宝贝详情页接口及关键词搜索商品
    VBA实战(11) - 工作表(Sheet) 操作汇总
  • 原文地址:https://blog.csdn.net/qq_33479841/article/details/127832471