设计模式之外观模式

外观模式

本质: 封装交互,简化调用

何时使用外观模式
image.png

相关模式

image.png

外观模式经典代码:

package com.tao.design.facade;/*** @projectName: DesignMode* @package: com.tao.design.facade* @className: ServiceA* @author: TT_Hugo* @description: TODO* @date: 2022/12/26 22:05* @version: 1.0*/
public interface ServiceA {void methodA();
}
package com.tao.design.facade;/*** @projectName: DesignMode* @package: com.tao.design.facade* @className: ServiceAImpl* @author: TT_Hugo* @description: TODO* @date: 2022/12/26 22:06* @version: 1.0*/
public class ServiceAImpl implements ServiceA{@Overridepublic void methodA() {System.out.println("这是服务A");}
}
package com.tao.design.facade;/*** @projectName: DesignMode* @package: com.tao.design.facade* @className: ServiceB* @author: TT_Hugo* @description: TODO* @date: 2022/12/26 22:05* @version: 1.0*/
public interface ServiceB {void methodB();
}
package com.tao.design.facade;/*** @projectName: DesignMode* @package: com.tao.design.facade* @className: ServiceBImpl* @author: TT_Hugo* @description: TODO* @date: 2022/12/26 22:06* @version: 1.0*/
public class ServiceBImpl implements ServiceB{@Overridepublic void methodB() {System.out.println("这是服务B");}
}
package com.tao.design.facade;/*** @projectName: DesignMode* @package: com.tao.design.facade* @className: ServiceC* @author: TT_Hugo* @description: TODO* @date: 2022/12/26 22:05* @version: 1.0*/
public interface ServiceC {void methodC();
}
package com.tao.design.facade;/*** @projectName: DesignMode* @package: com.tao.design.facade* @className: ServiceCImpl* @author: TT_Hugo* @description: TODO* @date: 2022/12/26 22:06* @version: 1.0*/
public class ServiceCImpl implements ServiceC{@Overridepublic void methodC() {System.out.println("这是服务C");}
}

门面类:将交互封装起来,简化使用者的调用

package com.tao.design.facade;/*** @projectName: DesignMode* @package: com.tao.design.facade* @className: Facade* @author: TT_Hugo* @description: TODO* @date: 2022/12/26 22:08* @version: 1.0*/
public class Facade {ServiceA sa;ServiceB sb;ServiceC sc;public Facade() {sa = new ServiceAImpl();sb = new ServiceBImpl();sc = new ServiceCImpl();}public void methodA() {sa.methodA();sb.methodB();}public void methodB() {sb.methodB();sc.methodC();}public void methodC() {sc.methodC();sa.methodA();}
}

测试类

package com.tao.design.facade;/*** @Author Mi_Tao* @Date 2023/7/23* @Description* @Version 1.0**/
public class Client {public static void main(String[] args) {new Facade().methodA();}
}

在这里插入图片描述

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

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

相关文章

替换linux的文泉驿正黑fonts-wqy-zenhei字体 替换linux默认中文字体

WSL 怎么替换 linux 的文泉驿正黑 fonts-wqy-zenhei 字体 WSL 怎么替换 linux 默认中文字体 在 wsl 中默认是没有 gnome 界面或者 xface 的,但是我需要使用 wsl 开发 electron 或者使用 chrome 浏览器。这个时候系统就会调用默认的系统字体了。 我使用的是 debian…

Android 9系统源码_音频管理(一)按键音效源码解析

前言 当用户点击Android智能设备的按钮的时候,如果伴随有按键音效的话,会给用户更好的交互体验。本期我们将会结合Android系统源码来具体分析一下控件是如何发出按键音效的。 一、系统加载按键音效资源 1、在TV版的Android智能设备中,我们…

Linux - gcc/g++工具使用

gcc/g是用于编译C/C程序的编译器 1.编译过程 1. 预处理(头文件展开,条件编译,进行宏替换,去注释等) 2. 编译(C语言汇编语言) 3. 汇编(汇编->可重定位目标二进制文件,不可以被执行的&#xff…

【LLM系列之指令微调】长话短说大模型指令微调的“Prompt”

1 指令微调数据集形式“花样”太多 大家有没有分析过 prompt对模型训练或者推理的影响?之前推理的时候,发现不加训练的时候prompt,直接输入模型性能会变差的,这个倒是可以理解。假如不加prompt直接训练,是不是测试的时…

kafka集群搭建(Linux环境)

zookeeper搭建,可以搭建集群,也可以单机(本地学习,没必要搭建zookeeper集群,单机完全够用了,主要学习的是kafka) 1. 首先官网下载zookeeper:Apache ZooKeeper 2. 下载好之后上传到…

IP 监控软件

IP 监控软件可帮助管理员主动监控网络资源。随着各种设备连接到网络,监控设备和接口可能很复杂,为管理员提供这些设备的IP监控,了解其各种性能指标和问题。 使用有效的 IP 监控软件的优势 使用有效的 IP 监控系统和一套全面的 IP 监控工具&…

qt子进程和父进程读写数据通信

进程A(例如主程序)创建了一个QProcess B,这个B就称为A的子进程,而A称为B的父进程。 这也称为进程间通信,有多种方式: TCP/IPLocal Server/Socket共享内存D-Bus (Unix库)QProcess会…

Moonbeam:开发者的多链教科书

了解波卡的技术架构,只需掌握3个关键词: Relay Chain(中继链):Polkadot将自身视作多核计算机,承载区块链底层安全架构的辐射中心。Parachain(平行链):在“Layer 0”架构…

Postman如何导出接口的几种方法

本文主要介绍了Postman如何导出接口的几种方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 前言: 我的文章还是一贯的作风,简确用风格(简单确实有用)&am…

【从零开始学习JAVA | 三十四篇】IO流

目录 前言: IO流介绍: IO流的常见方法: 1.字节流类: 2.字符流类: 总结: 前言: IO流就是存入和读取数据的解决方案,并且他是一个知识点很多的章节,因此我们关于IO流…

Jmeter —— jmeter接口自动化测试操作流程

在企业使用jmeter开展实际的接口自动化测试工具,建议按如下操作流程, 可以使整个接口测试过程更规范,更有效。 接口自动化的流程: 1、获取到接口文档:swagger、word、excel ... 2、熟悉接口文档然后设计测试用例&am…

ES开启身份认证

文章目录 X-Pack简介之前的安全方案ES开启认证ES服务升级https协议开启集群节点之间的证书认证 X-Pack简介 X-Pack是Elastic Stack扩展功能,提供安全性,警报,监视,报告,机器学习和许多其他功能。 X-Pack的发展演变&am…

Pytest学习教程_测试报告生成pytest-html(三)

前言 pytest-html 是一个用于生成漂亮的 HTML 测试报告的 pytest 插件。它可以方便地将 pytest 运行的测试结果转换为易于阅读和理解的 HTML 报告,提供了丰富的测试结果展示功能和交互性。 一、安装 # 版本查看命令 pytest版本: pytest --version pyte…

VGN N75pro说明书

VGN N75pro说明书 1、封面和最后一页 2、第01、02、03 3、第04 4、第05

面试总结-Redis篇章(十)——Redis哨兵模式、集群脑裂

Redis哨兵模式、集群脑裂 哨兵模式哨兵的作用服务状态监控 Redis集群(哨兵模式)脑裂解决办法 哨兵模式 为了保证Redis的高可用,Redis提供了哨兵模式 哨兵的作用 服务状态监控 Redis集群(哨兵模式)脑裂 假设由于网络原…

344.翻转字符串+387.字符串中的第一个唯一字符

目录 一、翻转字符串 二、字符串中的第一个唯一字符 一、翻转字符串 344. 反转字符串 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:void reverseString(vector<char>& s) {int start0;int end s.size()-1;while(start < end){swap(s[sta…

3ds MAX 绘制喷泉

首先绘制一个小圆柱体当做喷头&#xff1a; 在粒子系统内选择【超级喷射】&#xff0c;并设置对应的参数&#xff1a; 轴和平面的扩散代表了我们看到的水柱能占据多大的面积 另外比较重要的参数是粒子运动和粒子计时 前者是粒子移动的时间也就是喷射的速度 后者代表了喷射出的…

构建语言模型:BERT 分步实施指南

学习目标 了解 BERT 的架构和组件。了解 BERT 输入所需的预处理步骤以及如何处理不同的输入序列长度。获得使用 TensorFlow 或 PyTorch 等流行机器学习框架实施 BERT 的实践知识。了解如何针对特定下游任务(例如文本分类或命名实体识别)微调 BERT。为什么我们需要 BERT? 正…

【VTK】基于读取出来的 STL 模型,当用户点击鼠标左键时,程序将获取点击位置的点,显示其坐标,并设置它为模型的旋转原点

知识不是单独的&#xff0c;一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏&#xff1a;Visual Studio。 文章目录 class PointPickedSignal : public QObjectclass MouseInteractorCommand : public vtkCommandvoid A::on_pushButtonSelected_clicked()void A::on…

vue3搭建(vite+create-vue)

目录 前提条件 输入命令 对于Add an End-to-End Testing Solution nightwatch和Cypress 和 Playwright 运行 前提条件 熟悉命令行已安装 16.0 或更高版本的 Node.js &#xff08;node -v查看版本&#xff09; 输入命令 npm init vuelatest 这一指令将会安装并执行 create-…