设计模式-代理模式、装饰者模式

代理模式

Proxy(代理)—对象结构型模式定义:给某一个对象提供一个代理对象,并由代理对象控制原有对象的引用。
代理模式的核心思想是:创建一个代理对象,代理对象在调用目标方法时,可以插入额外的逻辑。
 


注意区分装饰者模式和代理模式的区别。在代理模式中,ComponentImpl 和 Proxy 类都实现了 IComponent 接口,Proxy 对象中虽然也维护着一个 ComponentImpl 对象,但一般情况下它是代理类自己初始化的,不像装饰者模式是通过 set 进去的,同时在接口方法即 operation() 中代理对象会限制外界对被代理对象的访问,而装饰者模式是装饰者给被装饰者添加额外的行为。
Spring AOP底层,就是动态代理模式的实现。
 


适用场景分析:
1.需要修改或屏蔽某一个或若干个类的部分功能,复用另外一部分功能。
2.需要拦截一批类中的某些方法,在方法的前后插入一些一致的操作,如Spring的AOP。

装饰者模式

Decorator(装饰)—对象结构型模式定义:动态地给一个对象添加一些额外的功能。就增加功能来说,装饰模式相比生成子类更为灵活。

ComponentImpl 和 Decorator 类都实现了 IComponent 接口,不同的是 ComponentImpl 提供了具体实现,而 Decorator 是先聚合 ComponentImpl 接着在自己的实现方法即 operation() 方法中做些处理(即装饰)后再调用 ComponentImpl 对象的具体实现。

io中inputStream在装饰模式的用法 BufferedInputStream

设计原则:

• 遵循迪米特(最少知识原则)

• 单一职责

• 开闭原则

• 破坏里氏替换原则

场景分析:

1.需要动态地给一个对象增加功能,这些功能可以动态地撤销。

2.IO流包装、数据源包装。

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

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

相关文章

国产安路FPGA纯verilog视频图像去雾,基于暗通道先验算法实现,提供5套TD工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目国产安路FPGA相关方案推荐本博主已有的图像处理方案 3、设计思路框架工程设计原理框图输入Sensor之-->GC0308摄像头输入Sensor之-->OV7725摄像头输入Sensor之--…

Windows商店中的简笔画学习应用

此应用包含动物、植物、人物、交通工具、卡通等类别超过1500张线条图片,支持图片临摹和图片填色,可以将绘图和填色结果保存成文件,也可以打开本地图片进行临摹和填色。 菜单说明 右侧绘图区上方菜单功能包括:打开文件&#xff1…

树莓派4B --ubundu20.04 机载电脑配置WIFI热点

不要用刷机过程配置WIFI账号,因为在那里配置的WIFI都是不受控的,会出很多问题。 1.安装网络 sudo apt-get install network-manager 2.将源码CLONE到本地 sudo git clone https://github.com/oblique/create_ap cd create_ap sudo make install 当你…

​​JETSON NANO B01​ 在AIOT 的领域的作用

低功耗边缘设备的理想选择 👉 ​​适合人群​​:精打细算、小厂搞智能监控的 ​​Jetson Nano B01​​(4GB内存/0.47TOPS算力),JetBot (NVIDIA社区版) 机器人/自动驾驶项目​ ​​硬件​​:Jetson Nano B0…

Kioptrix Level2

靶机截图 收集信息 主机发现 打开靶机后,用kali探测靶机的 IP arp-scan-l 可以用nmap进行同网段扫描探测存活ip nmap -sP 10.4.7.0/24 端口扫描 命令过程 nmap -sT -sV -p- -O 10.4.7.220 -sT:TCP连接扫描 -sV:服务版本探测 -p-&#x…

Word之电子章制作——1

第一步:在插入 ——形状哪里选择一个圆形,并且下一步按住shift键拉出一个正圆形。 第二步:鼠标右键去掉背景颜色,边框粗细设置成3磅。 第三步:在插入导航窗找到艺术字,点击大写的A,输入公司名字…

LeetCode 2799.统计完全子数组的数目

给你一个由 正 整数组成的数组 nums 。 如果数组中的某个子数组满足下述条件,则称之为 完全子数组 : 子数组中 不同 元素的数目等于整个数组不同元素的数目。 返回数组中 完全子数组 的数目。 子数组 是数组中的一个连续非空序列。 示例 1&#xff1…

33.表复制和去重

1.表结构的复制(LIKE) 当我们想复制一个表的时候,首先需要创建一个与被复制表相同结构的表。这时候就要用到关键字like: 语法使用: create table table_name LIKE temp_table 示例:复制一个和表emp(老朋友了&#…

GitLab 18.1 正式发布Maven 虚拟仓库、密码泄露检测等功能,可升级体验!

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…

蓝牙网络拓扑面试通关:微微网与散射网原理 + 真题解析

为什么面试官总爱问蓝牙拓扑? 你可能有过这样的经历:面试嵌入式 / 物联网 / 无线通信岗位时,面试官突然问:“蓝牙的微微网和散射网有什么区别?” 别慌!这不是在考你背定义,而是考察你对无线通信核心逻辑的理解 ——如何用有限资源实现高效组网。 蓝牙作为短距离无线通信…

[Python]-基础篇1- 从零开始的Python入门指南

无论你是尚未接触编程的新手,还是想从其他语言转向Python的开发者,这篇文章都是你的入门课。 一、Python是什么? Python是一种解释型、高级、通用型编程语言,以简洁明了、简单易用着称。它可以应用于网站开发、自动化脚本、数据分析、人工智能、系统操作等多种场景。 二、…

Objective-C面向对象编程:类、对象、方法详解(保姆级教程)

目录 一、核心概念 二、类的定义(分.h和.m文件) 1. 头文件(.h)—— 公开声明 2. 实现文件(.m)—— 具体实现 3. 属性特性解析 原子性 所有权语义(ARC环境下) 读写控制 三、对象创建与内存管理 1…

CentOS 7 编译ClickHouse 24.8完整指南

前言 在CentOS 7上编译ClickHouse 24.8可能会遇到一些挑战,主要是因为CentOS 7的默认软件版本较旧。本文将详细介绍从零开始构建ClickHouse 24.8的完整过程,包括依赖安装和环境配置。 准备工作 首先确保系统已更新到最新版本: yum update…

Protocol Buffers (Protobuf) 全面解析

一、核心概念解析 1. 什么是数据序列化? #mermaid-svg-HZKw9iRlpQIRFiO3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-HZKw9iRlpQIRFiO3 .error-icon{fill:#552222;}#mermaid-svg-HZKw9iRlpQIRFiO3 .…

高斯混合模型GMMK均值(十三-1)——K均值是高斯混合模型的特例

EM算法与K均值算法的关系 K均值可以看成是高斯混合模型的特例。 对K均值算法与EM算法进行比较后,可以发现它们之间有很大的相似性。K均值算法将数据点硬(hard)分配到聚类中,每个数据点唯一地与一个聚类相关联,而EM算法…

StarRocks 向量索引如何让大模型“记性更好”?

随着 ChatGPT、DeepSeek 等大语言模型的普及,我们已经能够与 AI 进行流畅的对话。然而,即使是最先进的大模型也面临着“记忆困境”,具体表现模型只能记住训练时接触的知识,且这些知识在使用时很可能会过期。实际应用或在处理特定领…

UniApp Vue3 模式下实现页面跳转的全面指南

1. 引言 1.1 UniApp 与 Vue3 的结合优势 UniApp 是一个使用 Vue.js 开发所有前端应用的框架,支持编译到 iOS、Android、H5、以及各种小程序平台。Vue3 提供了更高效的响应式系统和 Composition API,使开发体验更加现代化和灵活。 1.2 页面跳转在应用开发中的重要性 页面跳…

Solidity学习 - ABI 应用二进制接口

文章目录 一、ABI 基础概念1. ABI 与 API 的区别2. ABI 的核心作用 二、ABI 接口描述1. 编译后的产物2. ABI JSON 格式示例3. ABI JSON 关键字段说明 三、ABI 编码1. 编码示例2. 编码数据的组成3. Solidity 中的编码函数 四、ABI 解码1. 解码的基本概念2. 事件日志的解码 五、A…

星际争霸数据集指南

星际争霸作为检验AI效果的一个重要“模式生物”, 是验证AI技术的重要平台‌,尤其在 深度学习 和 强化学习领域。该游戏因其复杂的游戏机制和实时决策要求,为AI研究提供了丰富的测试环境和挑战。 本博文是记录自己曾经研究星际争霸AI时对于数据部分的一点…

VUE组件与组件之间的传参

每次启动vue2项目的时候在 vue.config.js中配置: const { defineConfig } require(vue/cli-service) module.exports defineConfig({transpileDependencies: true,//关闭语法严格检验lintOnSave:false})1:在 src 下 创建 utils 文件夹 然后创建 Bas…