【Java面试题】设计模式之七种结构性模式——代理模式、适配器模式、桥接模式、装饰模式、外观模式、享元模式、组合模式
目录
一、代理模式
二、适配器模式
三、桥接模式
四、装饰模式
五、外观模式
六、享元模式
七、组合模式
一、代理模式
概念:
代理模式是为其他对象提供一种以代理控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
优点:
(1)职责清晰
真实的角色就是实现实际的业务逻,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
(2)代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。
(3)高扩展性。
二、适配器模式
概念:
适配器模式是将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
优点:
(1)代理模式能将代理对象与真实被调用的目标对象分离。
(2)一定程度上降低了系统的耦合度,扩展性好。
(3)可以起到保护目标对象的作用。
(4)可以对目标对象的功能增强。
三、桥接模式
概念:
桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体模式或接口模式。它很好的支持了开闭原则和组合锯和复用原则。实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这些多角度分离出来让他们独立变化,减少他们之间的耦合。将抽象化与实现化脱耦,使得二者可以独立地变化。
优点:
(1)抽象和实现的分离。
(2)优秀的扩展能力。
(3)实现细节对客户透明。
四、装饰模式
概念:
装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。装饰模式把复杂类中的核心职责和装饰功能区分开了,这样既简化了复杂类,有去除了相关类中重复的装饰逻辑。 装饰模式没有通过继承原有类来扩展功能,但却达到了一样的目的,而且比继承更加灵活,所以可以说装饰模式是继承关系的一种替代方案。
优点:
(1) 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。
(2) 装饰对象接受所有来自客户端的请求。它把这些请求转发给真实的对象。
(3) 装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能
五、外观模式
概念:
外观模式,又名过程模式。学校课程评价模式之。外观类为子系统提供一个共同的对外接口,客户对象通过一个外观接口读写子系统中各接口的数据资源。外观模式中,客户对各个具体的子系统是不了解的,所以对这些子系统进行了封装,对外只提供了用户所明白的单一而简单的接口,用户直接使用这个接口就可以完成操作,而不用去理睬具体的过程,而且子系统的变化不会影响到用户,这样就做到了信息隐蔽。
优点:
(1)降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类,便于子系统内部维护和扩展。
(2)对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易,降低了复杂性。
(3)降低了大型软件系统中的编译依赖性,简化了系统在不同平台之间的移植过程,因此编译一个子系统不会影响其他子系统,也不会影响外观对象。
六、享元模式
概念:
享元模式它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。
优点:
(1)相同对象只要保存一份,这降低了系统中对象的数量,从而降低了系统中细粒度对象给内存带来的压力。
七、组合模式
概念:
组合模式将对象组合成树形结构以表示部分-整体的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。
优点:
(1)定义了包含基本对象和组合对象的类层次结构。
(2)统一了组合对象和叶子对象。
(3)简化了客户端调用
(4)更容易扩展。
相关文章:
【Java面试题】设计模式之七种结构性模式——代理模式、适配器模式、桥接模式、装饰模式、外观模式、享元模式、组合模式
目录 一、代理模式 二、适配器模式 三、桥接模式 四、装饰模式 五、外观模式 六、享元模式 七、组合模式 一、代理模式 概念: 代理模式是为其他对象提供一种以代理控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象࿰…...
【从零开始学习 UVM】6.3、UVM 激励产生 —— start() 方法执行sequence详解
文章目录 start方法解析简单sequence flow继承的seqeunce flow生成sequence flowstart方法解析 virtual task start ( uvm_sequencer_base sequencer,uvm_sequence_base parent_sequence = null,int this_priority = -1...
「Python 机器学习」Matplotlib 数据探索
Matplotlib 是一个 Python 的数据可视化库,它能够轻松创建各种类型的图表和图形;Matplotlib 可以在 Jupyter Notebooks、交互式应用程序和脚本中使用,并支持多种绘图样式和格式; Matplotlib 最初是为科学计算而设计的,…...
3.24-3.26学习总结
目录 一.方法methed 二.构造方法(构造器) 三.方法重载 四.方法覆写 一.方法methed 1.定义: 修饰符 方法返回类型 方法名(参数列表){ 系列语句; return 返回值; } 2.public方法/字段: 公开给…...
OpenAI Translator 基于 ChatGPT API 的划词翻译工具
OpenAI Translator,一款基于 ChatGPT API 的划词翻译浏览器插件和跨平台桌面端应用,使用 ChatGPT API 进行划词翻译和文本润色,借助了 ChatGPT 强大的翻译能力,帮助用户更流畅地阅读外语和编辑外语,允许跨 55 种不同语…...
git常用指令---复习向
git常见的指令: 本地仓库 1.创建仓库: git init 会出现.git文件夹 2.查看git状态:git status 3.添加一个文件: git add <fileName> 4.添加所有文件:git add . 5.提交并附加信息:git commit -m&…...
安卓开发学习记录(持续学习)
文章目录前言工具创建项目简单控件即UI一、界面显示与逻辑处理二、文本三、布局四、按钮五、控件综合训练(简易计算器)六、Activity七. 中级控件前言 最近在有在持续学习Java的安卓开发,不断的把知识记录下。 工具 Android Studio安装 [Studio安装][1] [1]: https…...
【redis】AOF日志:宕机了,Redis如何避免数据丢失
专题3-AOF日志:宕机了,Redis如何避免数据丢失 因为redis的数据是存在内存中的,一旦服务器宕机,内存中的数据会全部丢失。 AOF:redis先执行命令,把数据写入内存,然后才记录日志。 AOF优点&…...
第三章Vue中的Ajax
文章目录Vue脚手架配置代理为什么要配置代理服务器什么是跨域?代理跨域CORS跨域利用Vue-CLI配置代理服务器GitHub用户搜索案例本案例需要下载axios库: npm install axiosVue脚手架配置代理 为什么要配置代理服务器 什么是跨域? 跨域资源共…...
在 Python3 中使用 JSON
在 Python3版本中使用 JSON 本教程将会教我们如何使用 Python 编程语言编码和解码 JSON。 环境 在python3中(以及python2.6版本后的python2版本)内置了JSON模块,无需额外安装另外的JSON模块。 简介 JSON模块是python内置的用来进行pytho…...
图神经网络GNN介绍
目录标题图神经网络基础图基本模块定义图的邻接矩阵点特征的更新(重构)多层GNN图卷积GCN模型GCN基本思想网络层数:基本计算图注意力机制graph attention networkT-GCN序列图神经网络图相似度图神经网络基础 图基本模块定义 三个特征&#x…...
【面试】TCP、UDP、Socket、HTTP网络编程面试题
文章目录什么是网络编程网络编程中两个主要的问题网络协议是什么为什么要对网络协议分层计算机网络体系结构1 TCP / UDP1.1 什么是TCP/IP和UDP1.2 TCP与UDP区别:1.3 TCP和UDP的应用场景:1.4 形容一下TCP和UDP1.5 运行在TCP 或UDP的应用层协议分析。什么是…...
Python语言的文件读写
🥑高级语言有很多共同之处,在文件读写这一部分我们就可以类比着之前我们过的C语言的文件读写的操作进行处理。 🥑还记得我们C语言当中的文件进行操作时所需要的哪些步骤吗?文件打开,文件读/写操作,文件关闭。我们的Py…...
面向对象 ( 上 )
Java面向对象 ( 上 ) 观看b站尚硅谷视频做的笔记 1、 面向过程 (POP) 与面向对象 (OOP) 2、类和对象 2.1、Java 类及类的成员 属性:对应类中的成员变量 行为:对应类中的成员方法。 2.2、类与对象的创建及使用 一、设计类,就是设计类的…...
Node.js学习笔记——会话控制
一、介绍 所谓会话控制就是对会话进行控制 HTTP 是一种无状态的协议,它没有办法区分多次的请求是否来自于同一个客户端, 无法区分用户 而产品中又大量存在的这样的需求,所以我们需要通过 会话控制 来解决该问题 常见的会话控制技术有三种&a…...
tsconfig.json参数详解
tsconfig.json是ts编译器的配置文件,ts编译器可以根据他的信息来对代码进行编译。 想要学习这篇文章小伙伴,可以先去看看下面文章,可以明白tsconfig.json的由来以及如何编译: 在vscode中使用Typescript并运行_typescript vscode…...
Pyecharts Geo绘制可视化地图并展示坐标位置
文章目录 Pyecharts Geo绘制可视化地图安装需要的模块绘制出地图生成空白地图修改参数,调整地图输出格式地图上展示坐标位置输入坐标点将坐标点添加入系列并配置系列完整代码参考文献Pyecharts Geo绘制可视化地图 安装需要的模块 pip install pyecharts绘制出地图 生成空白…...
什么是Hbuilder?--前端工具IDE
一,简介HBuilder 1.1HBuilder HBuilder是DCloud(数字天堂)推出的一款支持HTML5的Web开发IDE。HBuilder的编写用到了Java、C、Web和Ruby。HBuilder本身主体是由Java编写。它基于Eclipse,所以顺其自然地兼容了Eclipse的插件从Fron…...
07-centos-更改数据源、打补丁、查看内核
本文主要是介绍linux-centos的常用操作 更改数据源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo 查看内核 [rootcentos02 ~]# uname -a Linux centos02 2.6.32-642.el6.x86_64 #1 SMP Tue May 10 17:27:01 UTC 2016 x86_64 …...
flac格式如何转mp3,3种简单方法值得收藏
flac格式如何转mp3?mp3是小伙伴们所熟知的音频格式,相信flac格式也一定有小伙伴知道,它是一种无损音频压缩格式,是目前流行的数字音乐文件格式之一。那么为什么要将flac格式转换成mp3格式呢,这里小编就给大家讲一讲fla…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
