Java设计模式 _结构型模式_外观模式
一、外观模式
1、外观模式
外观模式(Facade Pattern)是一种结构型模式。主要特点为隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这有助于降低系统的复杂性,提高可维护性。当客户端与多个子系统之间存在大量的交互时,有助于减少客户端与子系统之间的耦合,提高系统的可扩展性。同时保护了子系统的内部实现,提高系统的安全性。
2、实现思路
(1)、创建一个统一接口,并完成各种实现类的编写;
(2)、编写外观类,将各种实现类都内置为外观类的成员变量;
(3)、在外观类中,通过构造方法或者自定义方法,去创建成员变量的实例。
(4)、定义外观需要的各种方法,可以是调用某一个实现类的方法,或者是组合多个实现类的方法。
二、代码示例
1、代码示例
通过形状的超市去获取各种形状,而不是通过每一个形状的实例去获取。
// 1、定义形状的抽象接口
public interface Shape {public void draw();
}
// 2.1、定义绘制圆形的方法
public class CircleShape implements Shape {@Overridepublic void draw() {System.out.println("绘制圆形");}
}
// 2.2、定义绘制正方形的方法
public class SquareShape implements Shape {@Overridepublic void draw() {System.out.println("绘制正方形");}
}
// 2.3、定义绘制三角形的方法
public class TriangleShape implements Shape {@Overridepublic void draw() {System.out.println("绘制三角形");}
}
// 3、定义外观类,形状市场
public class ShapeMarket {private Shape circleShape;private Shape squareShape;private Shape triangleShape;public ShapeMarket(){this.circleShape = new CircleShape();this.squareShape = new SquareShape();this.triangleShape = new TriangleShape();}// 绘制圆形外观方法public void drawCircle(){this.circleShape.draw();}// 绘制正方形外观方法public void drawSquare(){this.squareShape.draw();}// 绘制三角形外观方法public void drawTriangle(){this.triangleShape.draw();}// 通过组合--生成绘制多个图形的外观方法public void drawAll(){this.circleShape.draw();this.squareShape.draw();this.triangleShape.draw();}
}
// 4、测试类,通过市场来绘制图形
public static void main(String[] args) {ShapeMarket market = new ShapeMarket();System.out.println("**********");market.drawCircle(); // 用外观类画圆System.out.println("");System.out.println("**********");market.drawSquare(); // 用外观类画正方形System.out.println("");System.out.println("**********");market.drawTriangle(); // 用外观类画三角形System.out.println("");System.out.println("**********");market.drawAll(); // 用外观类绘制多个图形}
运行结果:
总结:
外观模式的套路,就是将多个相关业务的类都放在一个类中,作为属性成员去管理。之后根据业务需要定义的各种对外的方法,而在这些方法中真正起作用还是通过直接或者组合调用成员方法去实现的。
学海无涯苦作舟!!!
相关文章:

Java设计模式 _结构型模式_外观模式
一、外观模式 1、外观模式 外观模式(Facade Pattern)是一种结构型模式。主要特点为隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这有助于降低系统的复杂性,提高可维护性。当客户端与多个子系统之间存在大量…...
数据结构之----栈与队列
栈是限定仅在表尾进行插入和删除操作的线性表; 队列是只允许在一端进行插入操作,而另一端进行删除操作的线性表; 栈,允许插入和删除的一端称为栈顶,另一端称为栈底,特点后进先出。 插入操作称为进栈&#…...

如何在windows server下安装mysql5.7数据库,并使用Navicat Premium 15可视化工具新建数据库并读取数据库信息。
如何在windows server下安装mysql5.7数据库? MySQL :: Download MySQL Community Server (Archived Versions)https://downloads.mysql.com/archives/community/点击↑,然后选择对应版本和平台↓下载 将下载后的安装包放入固定目录(这里以D:…...

Calendar 366 II for Mac v2.15.5激活版:智能日历管理软件
在繁忙的工作和生活中,如何高效管理日程成为了许多人的难题。Calendar 366 II for Mac,作为一款全方位的日历管理软件,以其独特的功能和优秀的用户体验,成为您的日程好帮手。 Calendar 366 II for Mac支持多种视图模式,…...

react引入阿里矢量库图标
react引入阿里矢量库图标 登录阿里矢量库,将项目所需的图标放一起 react项目中新建文件夹MyIcon.js 3. 在页面中引入,其中type为图标名称...

部署Gerapy
1.Gerapy 是什么? Gerapy 是一款基于 Python 3 的分布式爬虫管理框架,它旨在简化和优化分布式爬虫的部署、管理和监控过程。 2.作用与功能? 2.1分布式管理: Gerapy 允许用户在多台机器上部署和管理Scrapy爬虫,实现爬虫…...

Github Benefits 学生认证/学生包 新版申请指南
本教程适用于2024年之后的Github学生认证申请,因为现在的认证流程改变了很多,所以重新进行了总结这方面的指南。 目录 验证教育邮箱修改个人资料制作认证文件图片转换Base64提交验证 验证教育邮箱 进入Email settings,找到Add email address…...
基于单片机的宠物智能投喂系统研究
目录 第一章 研究背景和意义.................................................................... 4 1.1 研究背景....................................................................................... 5 1.2 研究目的.............................................…...
Linux-笔记 常用命令
(持续更新) 1、压缩: tar -vcjf test1.tar.bz2 test1 tar -vczf test1.tar.gz test1 2、解压 tar -vxjf test1.tar.bz2 tar -vxzf test2.tar.gz 3、查找 find [路径] [参数] [文件名] : find / -name test* grep [参数] 关键字 路径&a…...
MySQL中,关于日期类型的那些事儿,你知道哪些?
在MySQL数据库中,除了前面我们聊到的数字类型和字符串类型,还有一个常用的数据类型:日期类型。在我们业务表中,基本上每个业务表都有日期类型,用于记录创建时间和修改时间。比如我们的用户表,一般除了要记录…...

【Chrome实用命令笔记】
文章目录 Chrome实用命令笔记1、chrome基本介绍2. 打开开发者工具(DevTools)方法一:快捷键方法二:右键菜单方法三:浏览器设置 2. 开发者工具面板Elements面板Console面板Sources面板Network面板Performance面板Memory面…...
【数据库】数据库事务原理
事务特性 https://blog.csdn.net/zxcyxg123/article/details/132020499 MVCC MVCC(Multi-Version Concurrency Control),即多版本并发控制,是一种并发控制的方法,主要用于数据库管理系统中,以实现对数据库…...

LeetCode 106.从中序与后序遍历序列构造二叉树
LeetCode 106.从中序与后序遍历序列构造二叉树 1、题目 题目链接:106. 从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并…...
Python中的compile()函数,动态编译代码的艺术
关注公众号【一点sir】,领取编程资料。 简介 在Python编程中,compile()函数是一个强大的工具,它允许开发者将字符串形式的Python代码动态编译成字节码。这为执行动态生成或从外部源接收的代码提供了极大的灵活性。这些字节码随后可以被Pytho…...

【考研数学】汤家凤“免单“数学题被吐槽‘太难’,老汤回应「怎么还有脸笑」,网友:这些题有毒!
我看了汤家凤老师出的几道题,实际上对于考研的同学来说,确实是送分题 第一个是三角函数变换中的万能公式;第二个e^x的泰勒展开公式;第三个是第一类重要极限。只要复习过,那基本上都能正常做出来。 至于汤家凤老师说「…...

在另外一个页面,让另外一个页面弹框显示操作(调佣公共的弹框)
大概意思是,登录弹框在另外一个页面中,而当前页面不存在,在当前页面中判断如果token不存在,就弹框出登录的弹框 最后一行 window.location.href … 如果当前用户已登录,则执行后续操作(注意此处,可不要)...

如何利用IPIDEA代理IP优化数据采集效率?
一、 前言二、 IPIDEA介绍三、体验步骤四、实战训练五、结语 一、 前言 在全球化与信息化交织的当代社会,数据已成为驱动商业智慧与技术革新的核心引擎。网络,作为信息汇聚与交流的枢纽,不仅是人们获取知识的窗口,更是商业活动与技…...

Rpcx (一):详解【介绍、基础示例 demo】
一.rpcx介绍 1.1 rpc是什么 远程过程调用的通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用或远程方法调用。简单地说就是能使应用像调用本地…...

对数据进行标准化和归一化
数据的形式:保存在CSV中,第一列为姓名,第二列之后为特征。 标准化 输入文件的路径,设置保存转化后的文件路径 import pandas as pd from sklearn.preprocessing import StandardScaler# 读取CSV文件 data pd.read_csv(rC:\User…...

【从零开始学架构 架构基础】二 架构设计的复杂度来源:高性能复杂度来源
架构设计的复杂度来源其实就是架构设计要解决的问题,主要有如下几个:高性能、高可用、可扩展、低成本、安全、规模。复杂度的关键,就是新旧技术之间不是完全的替代关系,有交叉,有各自的特点,所以才需要具体…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...