当前位置: 首页 > news >正文

Java设计模式之外观模式

定义

又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。外观模式是“迪米特法则”的典型应用

结构

  • 外观角色:为多个子系统对外提供一个共同的接口。
  • 子系统角色:实现系统的部分功能,客户可以通过外观角色访问它。

案例

智能家电控制

子系统角色

public class TV {public void on(){System.out.println("开电视");}public void off(){System.out.println("关电视");}
}public class AirCondition {public void on(){System.out.println("开空调");}public void off(){System.out.println("关空调");}
}public class Light {public void on(){System.out.println("开灯");}public void off(){System.out.println("关灯");}
}

 外观角色

public class Controller {private Light light;private AirCondition airCondition;private TV tv;public Controller() {this.light = new Light();this.airCondition = new AirCondition();this.tv = new TV();}public void control(String command){if (command.equals("打开")){light.on();tv.on();airCondition.on();}else if (command.equals("关闭")){light.off();tv.off();airCondition.off();}else{System.out.println("错误指令");}}
}

测试 

public class Client {public static void main(String[] args) {Controller controller = new Controller();controller.control("打开");System.out.println("===========");controller.control("关闭");}
}

开灯

开电视

开空调

===========

关灯

关电视

关空调

只是实现了简单的一键开关,可以根据Controller中设置不同的子系统管理。

好处

  • 降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类。
  • 对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易。

缺点

  • 不符合开闭原则,修改很麻烦

使用场景

  • 对分层结构系统构建时,使用外观模式定义子系统中每层的入口点可以简化子系统之间的依赖关系。
  • 当一个复杂系统的子系统很多时,外观模式可以为系统设计一个简单的接口供外界访问。
  • 当客户端与多个子系统之间存在很大的联系时,引入外观模式可将它们分离,从而提高子系统的独立性和可移植性。

相关文章:

Java设计模式之外观模式

定义 又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,…...

MyBatis实现延时加载的方式

MyBatis实现延时加载的方式有两种: 使用resultMap的association和collection标签配置延时加载:在查询语句中,使用association标签配置一对一关联关系,使用collection标签配置一对多关联关系。然后在查询结果映射的resultMap中配置…...

计算未来:微软眼中的人工智能

计算未来 :人工智能及其社会角色(The Future Computed. Artificial Intelligence and its role in society )这本书于2018年09月由北京大学出版社出版。 书籍的作者是:沈向洋(微软全球执行副总裁),(美&…...

字号和磅的对应关系

字号「八号」对应磅值5 字号「七号」对应磅值5.5 字号「小六」对应磅值6.5 字号「六号」对应磅值7.5 字号「小五」对应磅值9 字号「五号」对应磅值10.5 字号「小四」对应磅值12 字号「四号」对应磅值14 字号「小三」对应磅值15 字号「三号」对应磅值16 字号「小二」对应磅值18 …...

Bag of Tricks for Efficient Text Classification(FastText)

主要的有点就是快,用途就是用于文本分类,模型结构如上,主要是通过embedding将文本转换成向量,然后进行mean-pooling,然后输入到hidden隐向量中,通过softmax输出多分类,损失函数是对数似然损失函…...

vue elementUI form组件动态添加el-form-item并且动态添加rules必填项校验方法

vue elementUI form组件动态添加el-form-item并且动态添加rules必填项校验方法 先看一下效果图&#xff08;想在表单里动态的增删 form-item&#xff0c;然后添加rules&#xff0c;校验其必填项&#xff1b; &#xff09;: html部分 <div v-for"(item, index) in …...

使用 ClickHouse 深入了解 Apache Parquet (一)

​ 【squids.cn】 全网zui低价RDS&#xff0c;免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 自2013年作为Hadoop的列存储发布以来&#xff0c;Parquet几乎已经成为一种无处不在的文件交换格式&#xff0c;它提供了高效的存储和检索。这种采纳使其成为更近期的…...

【每周一测】Java阶段二第四周学习

目录 1、request中的getParameter(String name)方法的功能是 2、request中的getParameter(String name)方法的功能是 3、spring创建bean对象没有以下哪个方式 4、spring依赖注入中没有以下哪个方式 5、RequestParam、RequestBody、PathVariable的应用场景及区别 6、Cooki…...

系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第四部分:微服务架构

本心、输入输出、结果 文章目录 系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第四部分&#xff1a;微服务架构前言典型的微服务架构是什么样的微服务的优势 微服务最佳实践在开发微服务时&#xff0c;我们需要遵循以下最佳实践&#xff1a; 微服务通常使用什么技术堆栈…...

顺序表ArrayList

作者简介&#xff1a; zoro-1&#xff0c;目前大二&#xff0c;正在学习Java&#xff0c;数据结构等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; 顺序表 概念Arraylist构造方法相关方法遍历操作 自…...

python软件安装技巧

安装软件时候加上源地址去安装&#xff0c;快速稳 pip install openni -ihttps://pypi.tuna.tsinghua.edu.cn/simple...

解析Apache Kafka中的事务机制

这篇博客文章并不是关于使用事务细节的教程&#xff0c;我们也不会深入讨论设计细节。相反&#xff0c;我们将在适当的地方链接到JavaDocs或设计文档&#xff0c;以供希望深入研究的读者使用。 为什么交易? 我们在Kafka中设计的事务主要用于那些显示“读-进程-写”模式的应用…...

Vue虚拟节点和渲染函数

1.虚拟节点 虚拟节点&#xff08;dom&#xff09;本质上就是一个普通的JS对象&#xff0c;用于描述视图的界面结构 2.渲染函数render()&#xff1a;接收一个 createElement()函数创建的VNode Vue.component("board", {render: function(createElement) {return cr…...

后台交互-首页->与后台数据进行交互,wsx的使用

与后台数据进行交互wsx的使用 1.与后台数据进行交互 // index.js // 获取应用实例 const app getApp() const apirequire("../../config/app.js") const utilrequire("../../utils/util.js") Page({data: {imgSrcs:[{"img": "https://cd…...

【微服务保护】Sentinel 流控规则 —— 深入探索 Sentinel 的流控模式、流控效果以及对热点参数进行限流

文章目录 前言一、快速掌握 Sentinel 的使用1.1 什么是簇点链路1.2 Sentinel 的简单使用示例 二、Sentinel 流控模式2.1 直接模式2.2 关联模式2.3 链路模式 三、流控效果3.1 快速失败3.2 预热模式3.3 排队等待 四、对热点参数的流控4.1 热点规则4.2 热点规则演示 前言 微服务架…...

ZXing.Net 的Core平台生成二维码

一、引用 二、代码 帮助类 /// <summary>/// ZXing.NET 二维码帮助类/// </summary>public class ZXingHelper{/// <summary>/// 站点二维码的目录/// </summary>private static string QRCodeDirectory "QRCode";/// <summary>/// 使…...

【C++】假设给类分配的是栈的空间,那么计算机是如何访问栈中不同位置的对象的数据的呢?

2023年10月22日&#xff0c;周日上午 当在栈上创建一个对象时&#xff0c;计算机会为该对象分配一块连续的内存空间。该内存空间的位置在栈帧中&#xff0c;栈帧是用来存储函数调用信息和局部变量的一块内存区域。 栈帧中包含一个指针&#xff0c;称为栈指针&#xff08;stack…...

iOS使用CoreML运用小型深度神经网络架构对图像进行解析

查找一个图片选择器 我用的是ImagePicker 项目有点老了&#xff0c;需要做一些改造&#xff0c;下面是新的仓库 platform :ios, 16.0use_frameworks!target learnings dosource https://github.com/CocoaPods/Specs.gitpod ImagePicker, :git > https://github.com/KevinS…...

使用Python打造微信高效自动化操作教程

引言 在如今数字化时代&#xff0c;人们对于效率的追求越来越强烈&#xff0c;尤其是在工作和学习中。自动化操作成为了提高生产力的有效途径之一&#xff0c;而PyAutoGUI和Pyperclip作为Python中的两个强大库&#xff0c;为我们实现自动化操作提供了便利。本文将向大家介绍如…...

怎么在爬虫中使用ip代理服务器,爬虫代理IP的好处有哪些?

随着互联网的快速发展&#xff0c;网络爬虫已经成为数据采集、分析和整理的重要工具。然而&#xff0c;随着网络技术的不断发展&#xff0c;许多网站都会采取反爬虫措施&#xff0c;以避免数据被恶意获取。在这种情况下&#xff0c;代理IP服务器就成为了爬虫们的必本备文工将具…...

小白程序员必看!收藏这份AI大模型学习进阶指南,轻松入行!

本文针对AI大趋势下&#xff0c;大学生如何快速进入AI领域的问题&#xff0c;提出解决方案。文章从专业背景出发&#xff0c;将学生分为技术背景和非技术背景两类&#xff0c;并分别给出适合的AI岗位选择&#xff0c;如算法工程师、AI产品经理等。随后&#xff0c;针对技术岗和…...

OAI基站配置文件命名规则全解析:从gnb.sa.band78到usrpb210,新手也能看懂

OAI基站配置文件命名规则全解析&#xff1a;从gnb.sa.band78到usrpb210&#xff0c;新手也能看懂 当你第一次打开OAI的/targets/PROJECTS/目录&#xff0c;看到像gnb.sa.band78.fr1.106PRB.usrpb210.conf这样的文件名时&#xff0c;是不是感觉像在解读外星密码&#xff1f;别担…...

Sentaurus仿真效率翻倍:详解Physics和Math模块里那些被你忽略的参数(以NPN仿真为例)

Sentaurus仿真效率翻倍&#xff1a;详解Physics和Math模块里那些被你忽略的参数&#xff08;以NPN仿真为例&#xff09; 在半导体器件仿真领域&#xff0c;Sentaurus作为行业标杆工具&#xff0c;其强大的功能背后往往隐藏着许多未被充分利用的性能优化参数。许多工程师在完成基…...

WAS Node Suite图像批量处理终极指南:5种高效解决Load Image Batch节点异常的实战方案

WAS Node Suite图像批量处理终极指南&#xff1a;5种高效解决Load Image Batch节点异常的实战方案 【免费下载链接】was-node-suite-comfyui An extensive node suite for ComfyUI with over 210 new nodes 项目地址: https://gitcode.com/gh_mirrors/wa/was-node-suite-comf…...

保姆级教程:用NVIDIA Jetson AGX Xavier和MAX9296采集板搭建8路GMSL2相机系统

保姆级教程&#xff1a;用NVIDIA Jetson AGX Xavier和MAX9296采集板搭建8路GMSL2相机系统 在自动驾驶和机器人视觉系统中&#xff0c;多路相机同步采集是环境感知的基础。NVIDIA Jetson AGX Xavier凭借其强大的AI算力和丰富的接口资源&#xff0c;成为这类应用的理想平台。本文…...

rk3568_总线设备模型匹配机制_注册dev

device注册过程1、首先将dev放入核的device链表中(platform_device_register) 2、将dev和内核中的驱动进行表较&#xff0c;若匹配则不进行后续比较&#xff0c;若不匹配&#xff0c;则一直比较直到遍历完所有的drv 3、匹配成功进入对应驱动的probe函数 platform_device_regist…...

eBay与PayPal:一场教科书式的收购与‘分手’,给技术人哪些商业启示?

eBay与PayPal&#xff1a;技术并购中的战略智慧与分拆逻辑 当eBay在2002年以15亿美元收购PayPal时&#xff0c;这场交易被普遍视为电商与支付的天作之合。然而十三年后&#xff0c;两家公司却选择了分道扬镳——这个看似矛盾的商业决策背后&#xff0c;隐藏着技术企业并购与分拆…...

Wan2.2-I2V-A14B生成效果深度评测:对比YOLOv5的目标运动模拟

Wan2.2-I2V-A14B生成效果深度评测&#xff1a;对比YOLOv5的目标运动模拟 1. 开场&#xff1a;当静态图片"活"起来 想象一下这样的场景&#xff1a;你手头有一张普通的办公室照片&#xff0c;桌面上摆着咖啡杯、笔记本电脑和几本书。通过Wan2.2-I2V-A14B模型&#x…...

Malloy 渲染系统深度解析:如何创建交互式数据可视化

Malloy 渲染系统深度解析&#xff1a;如何创建交互式数据可视化 【免费下载链接】malloy Malloy is a modern open source language for describing data relationships and transformations. 项目地址: https://gitcode.com/gh_mirrors/ma/malloy Malloy 是一款现代开源…...

SonarQube安装下载及代码覆盖率使用

SonarQube安装与使用指南 大纲 一、引言 介绍SonarQube及其作用 使用场景和优势 二、 下载安装SonarQube 下载与解压 运行与登录 安全设置 语言包安装 三、通过SonarQube进行代码扫描 创建项目 生成令牌 安装扫描工具 运行扫描命令 四、 查看运行结果 结果预览 详细报告分析 …...