• 详解设计模式:外观模式


    外观模式(Facade Pattern),又称为门面模式,是 GoF 的 23 种设计模式中的一种结构型设计模式。

    外观模式 是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使得子系统更容易使用。使用外观模式时,我们创建了一个统一的类,用来包装子系统中一个或多个复杂的类,客户端可以直接通过外观类来调用内部子系统中方法,从而外观模式让客户和子系统之间避免了紧耦合。

    本篇内容包括:关于外观模式、外观模式实现 Demo



    一、关于外观模式

    1、关于外观模式

    外观模式(Facade Pattern),又称为门面模式,是 GoF 的 23 种设计模式中的一种结构型设计模式。

    外观模式 是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使得子系统更容易使用。使用外观模式时,我们创建了一个统一的类,用来包装子系统中一个或多个复杂的类,客户端可以直接通过外观类来调用内部子系统中方法,从而外观模式让客户和子系统之间避免了紧耦合。

    外观模式 的本质是:封装交互,简化调用。

    2、关于外观模式的构成

    外观模式一般包含三种角色:

    • 外观(Facade)角色:为多个子系统对外提供一个共同的接口,IService。
    • 子系统(Sub System)角色:实现系统的部分功能,客户可以通过外观角色访问它,ServiceImpl。
    • 客户(Client)角色:通过一个外观角色访问各个子系统的功能,Controller。
    3、关于外观模式的XML

    在这里插入图片描述

    4、关于外观模式优缺点

    # 外观模式优点

    • 减低了子系统与客户端之间的耦合性,子系统的代码改变不会影响到客户端。这就是为啥天天说业务逻辑要放在 Serivce 实现层了,不仅仅是因为事务,改 Service 不会影响 Cotroller(假设多处地方调用该方法的情况下,除非你把方法参数和返回类型改了,这完全相当于删方法重写了不考虑);
    • 提高了代码的灵活性;
    • 提高了系统的安全性。

    # 外观模式缺点

    • 不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

    二、外观模式实现 Demo

    # SubSystem 子系统

    public class SubSystemA {
        public void methodA(){
    
        }
    }
    public class SubSystemB {
        public void methodB(){
    
        }
    }
    public class SubSystemC {
        public void methodC(){
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    # Facade 外观类

    public class Facade {
        private SubSystemA obj1=new SubSystemA();
        private SubSystemB obj2=new SubSystemB();
        private SubSystemC obj3=new SubSystemC();
    
        public void method(){
            obj1.methodA();
            obj2.methodB();
            obj3.methodC();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    # Client 客户端

    public class Client {
        public static void main(String[] args) {
            Facade facade=new Facade();
            facade.method();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    Fiddler(八) - 抓取手机APP的流量-插件Fiddler Orchestra Beta安装&配置
    MQ通道接收端绑定步骤
    计算机视觉学习记录(七):图像分类
    前端培训丁鹿学堂:vue之slot的使用汇总
    进程间通信之信号灯 || 网络协议UDP/TCP || 三次握手四次挥手
    CPU性能优化
    [Prob] (Coupon collector)
    PowerDesigner 与 mysql 同步数据
    SpringBoot之Spring核心AOP详解
    知物由学 | 弹幕蜂拥而入,智能审核平台如何用技术破局?
  • 原文地址:https://blog.csdn.net/weixin_45187434/article/details/128110295