外观模式(十三)

news2024/10/6 8:22:11

每天都是全新的一天,感谢今日努力的自己。

上一章简单介绍了组合模式(十二), 如果没有看过, 请观看上一章

一. 外观模式

引用 菜鸟教程里面的外观模式介绍: https://www.runoob.com/design-pattern/facade-pattern.html

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。

这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

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

一.一 介绍

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

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

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

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

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

应用实例

1、去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。

2、JAVA 的三层开发模式。

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

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

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

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

二. 实例应用

把多个复杂的操作 合并成一个操作,

多个复杂的操作, 并不是指不同的功能, 通常是指不同的模块。

如, 同时操作用户功能,部门功能,角色功能, 则可以将这些用一个接口进行处理。
对外只提供这一个接口,调用门面角色。

image-20230615092505971

二.一 未使用外观模式

二.一.一 用户功能

@Slf4j
public class User {

    public void addUser() {
        log.info("添加用户,省略了参数");
    }

    public void hello() {
        log.info(">>> 介绍用户");
    }
}

二.一.二 部门功能

@Slf4j
public class Dept {

    public void joinDept() {
        log.info(">>>> 用户添加到部门里面");
    }
}

二.一.三 用户分配角色

@Slf4j
public class UserRole {

    public void applyRole() {
        log.info(">>>> 给用户分配角色");
    }
}

二.一.四 之前新员工入职

员工入职, 要添加用户,加入到部门里面,添加角色,然后说 hello

 @Test
    public void oneTest() {
        User user = new User();
        Dept dept = new Dept();
        UserRole userRole = new UserRole();
        log.info(">>>>> 新员工入职流程");
        // 进行的操作
        user.addUser();
        dept.joinDept();
        userRole.applyRole();
        user.hello();

    }

image-20230615092746483

可以将这个流程包装起来然后对外只提供一个接口处理.

二.二 外观模式处理

二.二.一 定义外观类,提供接口

public class Facade {

    User user = new User();
    Dept dept = new Dept();
    UserRole userRole = new UserRole();

    public void addUser() {
        // 进行的操作
        user.addUser();
        dept.joinDept();
        userRole.applyRole();
        user.hello();
    }
}

二.二.二 调用处理

@Test
    public void twoTest() {
        log.info(">>>>> 新员工入职流程");
        Facade facade = new Facade();
        facade.addUser();
    }

image-20230615092914368


本章节的代码放置在 github 上:


https://github.com/yuejianli/DesignPattern/tree/develop/Appearance


谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/648743.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

商品编号篡改测试-业务安全测试实操(7)

商品编号篡改测试,邮箱和用户篡改测试 手机号码篡改测试-业务安全测试实操(6)_luozhonghua2000的博客-CSDN博客 邮箱和用户篡改测试 测试原理和方法 在发送邮件或站内消息时,篡改其中的发件人参数,导致攻击者可以伪造发信人进行钓鱼攻击等操作,这也是一种平行权限绕过漏洞…

2023年CPSM-3中级项目管理专业人员认证招生简章

CPSM-3中级项目管理专业人员认证,是中国标准化协会(全国项目管理标准化技术委员会秘书处)联合中国国际人才交流基金会,面向社会开展项目管理专业人员能力的等级证书。旨在构建多层次从业人员培养培训体系,建立健全人才…

软体机器人对工业应用的影响

原创 | 文 BFT机器人 软机器人模仿生物体的运动和动作,使它们具有高度的多功能性和迷人性。 软机器人领域正在迅速发展。它旨在为各种行业创造灵活的设备,包括医疗保健、太空探索、食品生产、地理、物流、康复、国防和家庭应用。 软机器人的独特之处在于…

windows下使用cmake编译c++

好久没有更新博客了 最近在做c相关的,编译起来确实很痛苦。 所以心血来潮,继续更新一下 主要还是一些跨平台的库,比如zlib、libpng、opencv、ffmpeg 编译工具使用mingw作为主要编译环境支持,使用msys进行编译。 一、下载mingw…

Python--输入和输出

Python--输入和输出 <font colorblue>一、输入&#xff1a;input()函数<font colorblue>二、输出&#xff1a;print()函数<font colorblue>1.print函数说明<font colorblue>2.格式化输出<font colorblue>方法一&#xff1a;使用占位符&#xff0…

MySQL哈希索引

介绍 建表时存储引擎选择 MEMORY&#xff0c;则创建索引就是哈希索引&#xff1a;如create index nameidx on student(name);哈希索引底层数据结构就是链式哈希表&#xff0c;链式就是指冲突时用链表法解决哈希表中的元素没有任何顺序可言&#xff0c;则只能进行等值比较。如果…

PinYin4j库的使用

一、PinYin4j库简介 1、PinYin4j简介 Pinyin4j 是一个流行的 Java 库&#xff0c;支持汉字和大多数流行的拼音系统之间的转换&#xff08;汉语拼音&#xff0c;罗马拼音等&#xff09;。可自定义拼音输出格式&#xff0c;功能强大。 官网地址&#xff1a;http://pinyin4j.sou…

道岔表示故障电路如何进行检查

一、分线盘区分提速道岔表示电路故障的方法 定位时可以通过测量X1、X2 (或者反位时X1、X3)端子间的交直流电压和BD1-7的3号端子上的电流&#xff0c;来判断表示电路的故障和范围。表示电路正常工作时&#xff0c;在分线盘端子X1、X2之间可以测到电压交流60V左右&#xff0c;直…

小白也能学会的电脑C盘空间释放技巧大集合

引言 电脑C盘快装满了怎么办&#xff1f;这是很多人使用电脑时面临的困扰。电脑的运行速度会变得很慢&#xff0c;甚至出现蓝屏等问题。那么&#xff0c;如何解决电脑C盘快装满的问题呢&#xff1f;接下来&#xff0c;本文将详细介绍解决电脑C盘快装满的几种方法。 先记录一下…

浪涌保护器的工作原理

浪涌保护器&#xff08;SPD&#xff09;旨在通过限制瞬态电压和转移浪涌电流来保护电气系统和设备免受浪涌事件的影响。 浪涌可能来自外部&#xff0c;最强烈的是雷击&#xff0c;也可能来自内部的电气负载切换。这些内部浪涌的来源占所有瞬变的65%&#xff0c;可能包括负载打…

CSS | CSS中height:100vh和height:100%的区别

目录 1、对于设置height:100%;有下面几种情况 2、对于设置height:100vh时有如下的情况 首先&#xff0c;我们得知道1vh它表示的是当前屏幕可见高度的1/100&#xff0c;而1%它表示的是父元素长或者宽的1% 1、对于设置height:100%;有下面几种情况 &#xff08;1&#xff09;当…

【备战秋招】每日一题:5月13日美团春招:题面+题目思路 + C++/python/js/Go/java带注释

2023大厂笔试模拟练习网站&#xff08;含题解&#xff09; www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据&#xff0c;挂载到我们的OJ上&#xff0c;供大家学习交流&#xff0c;体会笔试难度。现已录入200道互联网大厂模拟练习题&a…

macOS降级,从 Ventura 13.0至Monterey 12.6.1,适用于m芯片电脑

Mac资源&#xff1a;macw 准备工作&#xff1a; 请确保已经备份Mac上的重要资料&#xff0c;我当时将重要资料保存在了iCloud&#xff0c;你也可以将资料备份到其他地方&#xff0c;anyway。 将对应文件夹拖进iCloud Drive&#xff0c;等待其完成上传 准备一个外置存储器&am…

【机器学习】十大算法之一 “K-means”

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

第六章 彩色图像处理

第六章 彩色图像处理 6.1彩色基础 颜色特性&#xff1a; 亮度&#xff1a;表达了无色的强度概念色调&#xff1a;光波混合中与波长有关的属性&#xff08;即颜色&#xff09;饱和度&#xff1a;即相对纯净度&#xff0c;或一种颜色混合白光的数量。饱和度与所加白光成反比 …

tf卡和sd卡引脚定义和性能指标

sd卡和tf卡的引脚定义和引脚对应关系&#xff0c;见下图 tf卡的性能 选择tf卡时&#xff0c;我们主要是考虑下边几个性能&#xff0c;这几个性能一般都是可以直接看内存卡看出来的。 注&#xff1a;只介绍通过卡的标识来判断性能&#xff0c;卡的真假自己识别&#xff0c;不考…

踩坑笔记 Spring websocket并发发送消息异常

文章目录 示例代码WebSocketConfig配置代码握手拦截器代码业务处理器代码 问题复现原因分析解决方案方案一 加锁同步发送方案二 使用ConcurrentWebSocketSessionDecorator方案三 自研事件驱动队列&#xff08;借鉴 Tomcat&#xff09; 总结 今天刚刚经历了一个坑&#xff0c;非…

Linux系统基础知识与自学方法

大部分非计算机相关的朋友也经常使用电脑&#xff0c;所以我们频繁接触的是Windows系统。关于这个系统的评价不一&#xff0c;一部分人觉得简洁快捷&#xff0c;一部分人觉得问题&#xff08;病毒、弹窗&#xff09;多多&#xff0c;总之对Windows系统系统的评价参差不齐&#…

案例精述 | FortiEDR双活终端安全方案护航金融多云多分支场景

金融行业多云、多分支等特点&#xff0c;在数字化时代迎来更多安全挑战。尤其在勒索软件等威胁猖獗的大背景下&#xff0c;“安全运营”理念要求金融企业不仅要对威胁攻击“知其然”&#xff0c;还要“知其所以然”。因此&#xff0c;某金融企业希望提升端点安全防护&#xff0…

样本文件的使用方法以及注意事项

经常使用CHS零壹视频系列的朋友们应该对“样本文件”不陌生&#xff0c;在各种案例中我们也强烈建议在视频扫描时加载样本文件&#xff0c;而在视频修复时则样本文件成了必选项。今天我们来聊聊样本文件的作用和使用要求。 什么是样本文件&#xff1f; 从数据恢复广义的角度讲…