首页 > 其他分享 >学习记录-外观模式

学习记录-外观模式

时间:2023-01-12 00:33:26浏览次数:64  
标签:外观 记录 系统 模式 boolean static 子系统 客户端

外观模式

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。

介绍

意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端之间的接口。

何时使用: 1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。 2、定义系统的入口。

如何解决:客户端不与系统耦合,外观类与系统耦合。

关键代码:在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。

应用实例: 1、去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。 2、JAVA 的三层开发模式。

优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。

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

使用场景: 1、为复杂的模块或子系统提供外界访问的模块。 2、子系统相对独立。 3、预防低水平人员带来的风险。

注意事项:在层次化结构中,可以使用外观模式定义系统中每一层的入口。

实现

类图

image-20230112001445063

代码实现

public class Main {
    public static void main(String[] args) {
        boolean result = new Facade().prove();
        System.out.println(result);
    }

    //定义子系统,子系统有三个
    //正常来说我们需要访问三个子系统的三个方法才能去确定我们最终的结果
    //注:这里static修饰只是因为在main函数里调用了相关函数,并无其它意义。
    static class SubFlow1 {
        boolean isTrue() {
            return true;
        }
    }

    static class SubFlow2 {
        boolean isOk() {
            return true;
        }
    }

    static class SubFlow3 {
        boolean isGoodMan() {
            return true;
        }
    }

    //创建一个外观模式类
    //注:这里static修饰只是因为在main函数里调用了相关函数,并无其它意义。
    static class Facade {
        //定义三个子系统的引用
        SubFlow1 s1 = new SubFlow1();
        SubFlow2 s2 = new SubFlow2();
        SubFlow3 s3 = new SubFlow3();

        //定义一个prove方法,来隐藏系统的复杂性
        boolean prove() {
            return s1.isTrue() && s2.isOk() && s3.isGoodMan();
        }
    }
}

运行结果

true

此文章参考:

【菜鸟教程】:https://www.runoob.com/design-pattern/facade-pattern.html
【五分钟学设计模式.08.外观模式-哔哩哔哩】: https://b23.tv/HEhDyFx

标签:外观,记录,系统,模式,boolean,static,子系统,客户端
From: https://www.cnblogs.com/galo/p/17045265.html

相关文章

  • 学习记录-观察者模式
    观察者模式当对象间存在一对多关系时,则使用观察者模式(ObserverPattern),也称之为发布-订阅模式。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型......
  • 1.11刷题记录
    1.Yesecnodrumsticks1根据题目提示得知本题是lsb隐写打开附件得到一张图片用stegsolve打开flag{Yesec_1s_lsb}2.qsdz'sgirlfriend1根据题目提示得知:flag......
  • 记录一种独特的特殊网络流处理方式
    考虑如下抽象而来的问题:你有若干物品,每个物品都有两种属性。现在你想把他们分成若干组,使得每组内物品至少某种属性都相同,使得\(\sum_iS_i^2\)组大小平方和最大。利用......
  • 学习记录-适配器模式
    适配器模式适配器模式(AdapterPattern)是作为两个不兼容的接口之间的桥梁,它不会改变原先的接口。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式......
  • 设计模式(二)----软件设计原则
    在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,要尽量根据7条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。1、单一......
  • 路由传参,路由重定向和模式,编程式导航,编程式导航传参
    路由传参先配置好路由在父组件种添加<template><divclass="footer_wrap"><!--头部点击--><div><router-linkto="/practice1">点击测试1</router......
  • 玩转Vben Admin第2改:配置权限模式
    Vben设计了2种权限模式,分别是【前端角色权限(ROLE)】和【后端动态获取(BACK)】 详细说明请参考https://doc.vvbin.cn/guide/auth.html为了打造【轻前端重后端】我们希望......
  • 学习记录-装饰器模式
    装饰器模式装饰器模式(DecoratorPattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式......
  • 【编程】大端小端模式
    一句话:低位的数据保存到高位上,就是装大尾巴狼,就是大端。 数据:11223344(尾端是44)保存在寄存器:(左边是高地址)44332211  (右边是低地址) --大端保存在寄存器:(左边是高地址......
  • 网络流 24 题做题记录
    网络流24题做题记录P3254圆桌问题源点连单位,容量为单位人数,桌子连汇点,容量为桌子容量,各单位连各桌子,容量为\(1\),因为每个单位在每张桌子上最多\(1\)人,跑最大流。P......