什么是装饰器模式和代理模式,以及它们之间的区别?

设计模式第五讲-装饰器模式和代理模式详解 (1). 定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。(2). 优点:A. 采用装饰模式扩展对象的功能比采用继承方式更加灵活。B.可以设计出多个不同的具体装饰类,创造出多个不同行为的组合。(3). 缺点装饰模式增加了许多子类,如果过度使用会使程序变得很复杂。(1). 定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。 阅读详情

一. 装饰器模式

概念:装饰器模式就是给一个对象动态的增加一些功能,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。

类结构图:

代码理解:

1.先定义一个抽象接口Sourceable

package com.sjms.decorator;

public interface Sourceable {

    //自定义抽象方法

    void method();

}

2.定义一个实现类Source 实现抽象接口Sourceable

package com.sjms.decorator;

public class Source implements Sourceable {

    @Override

    public void method() {

        System.out.println("素颜可以如此之美!");

    }

}

 

3.定义一个装饰类Decorator实现Sourceable接口,装饰类持有被装饰对象的实例

package com.sjms.decorator;

public class Decorator implements  Sourceable {

    private  Sourceable source;

    public  Decorator(Sourceable source){

        this.source=source;

    }

    @Override

    public void method() {

          source.method();//保持原功能不变

        System.out.println("化妆之后你会更美");

    }

}

4.测试

package com.sjms.decorator;

public class SourceableTest {

    public static void main(String[] args) {

        Sourceable sourceable = new Source();

        sourceable.method();       

        System.out.println("------------------------------");

        // 接下来使用装饰类实现功能

        Sourceable sourceable1 = new Decorator(sourceable);//把要装饰的实例传给装饰类

        sourceable1.method();

    }

}

实际意义:

可以实现一个类功能的扩展。 可以动态的增加功能,而且还能动态撤销(继承不行)。

缺点:产生过多相似的对象,不易排错。

(装饰器模式体现了合成复用原则)

二.代理模式

概念: 代理模式就是找一个代理类替原对象进行一些操作。 比如我们在租房子的时候找中介,再如我们打官司需要请律师,中介和律师在这里就是我们的代理。

类结构图:

代码理解:

1.先定义一个抽象接口Sourceable

package com.sjms.proxy;

public interface Sourceable {

    //自定义抽象方法

    void method();

}

2.定义一个实现类Source 实现抽象接口Sourceable

package com.sjms.proxy;

public class Source implements Sourceable {

    @Override

    public void method() {

        System.out.println("素颜可以如此之美!");

    }

}

 

3.定义一个代理类实现接口

public class Proxy implements Sourceable {

    private Source source;

    public Proxy() {

        source = new Source();

    }

    @Override

    public void method() {

        source.method();

        System.out.println("我和装饰器模式其实是不一样的!");

    }

}

 

4.测试

package com.sjms.proxy;

public class SourceableTest {

    public static void main(String[] args) {      

        System.out.println("代理模式--------");

        Sourceable sourceable2 = new Proxy();

        sourceable2.method();

    }

}

 

实际意义:

    如果在使用的时候需要对原有的方法进行改进,可以采用一个代理类调用原有方法,并且对产生的结果进行控制,这种方式就是代理模式。 使用代理模式,可以将功能划分的更加清晰,有助于后期维护。

三.代理模式和装饰器模式的区别

    装饰器模式通常的做法是将原始对象作为一个参数传给装饰者的构造器,而代理模式通常在一个代理类中创建一个被代理类的对象。 装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问。(两者都是结构型设计模式)

-----随后补充在java相关技术框架,用到这两种设计模式的场景----

ROS专栏—基于STM32F103的INA219电源数据采集 文章主要记录了stm32f103对ina219的数据采集 阅读详情

相关推荐

Android AI Agent集成实战:架构设计与自动化技能开发

AI Agent(人工智能代理)是一种能够感知环境、自主规划并执行任务以达成目标的软件实体。其核心原理在于结合大语言模型的推理能力与工具调用(Tool Calling)技术,使应用从被动响应转向主动服务。在移动开发领域,这项技术的价值在于为应用注入“智能大脑”,实现跨应用自动化与个性化交互,从而显著提升用户体验和操作效率。具体到Android平台,其应用场景广泛,例如自动填写表单、智能聊天辅助、个性化工作流优化等。本文聚焦于Android AI Agent的工程化落地,深入探讨了如何利用Accessibil

weixin_42636895的博客 663

Java设计模式(六)装饰器模式-与代理模式的区别-项目实战应用

装饰器模式(Decorator Pattern): 在不改变对象自身的基础上,在程序运行期间给对象动态的添加职责;感觉有点儿类似于继承,不改变父类,子类可拓展功能; 和代理模式(代理设计模式) 真是太像了,简直一摸一样场景: 项目一期开发的时候,并没有给鉴权部分设置缓存;二期开发考虑到性能问题,想要给鉴权部分加上缓存,这里就选择了使用装饰器模式处理...

孔明的博客 3967

huggingface 镜像站推荐

在做 Ai 应用开发或者学习的时候,我们经常需要下载各种模型,而 huggingface 的模型下载速度很慢或者根本就连不上,这里推荐一个 huggingface 的镜像站,速度很快,可以大大提高我们的效率。

t951984189的博客 1万+

代理模式和装饰模式的区别

1、代理模式就是为其他对象提供一种代理以控制对这个对象的访问,最终都是通过代理类对象来访问,被代理的类对外是隐藏的,只能看到代理类。 2、装饰器模式强调的是增强自身,动态地给一个对象增加一些额外的职责。被装饰都可以被访问,只是功能被增强。

weixin_40017062的博客 4702

Python逆向爬取Tik Tok,MsToken,X-Bogus以及signature

tiktok作为字节海外的自媒体平台,具有很非常大的价值,本文旨在教会大家实现Tik Tok的签名获取以及数据的最终爬取。

weixin_74305707的博客 3270

【数学模型】灰色关联分析

数学模型-灰色关联分析

suic009的博客 1万+

代理模式和装饰器模式的区别

代理模式和装饰者模式的核心区别在于它们的目的:代理模式控制对对象的访问,而装饰者模式则为对象动态添加功能。理解这两种模式的使用场景和结构,有助于在软件设计中选择合适的设计模式。

u012534547的博客 1466

CREO5.0二次开发+VS2019配置详解

CREO5.0+VS2019配置更新 一、CREO5.0 配置 二、Visual Studio 2019配置 新建MFC DLL项目 文件>新建>项目,选择MFC DLL,如下图所示 项目名称CREO1 2、配置设置 打开项目属性: 配置资源管理器设置: 设置包含目录、库目录(根据自己CREO的安装位置来设置): 包含目录: 库目录: 预处理器设置: 把下面文字复...

liuyi2517的博客 1万+

java八股文面试[设计模式]——代理模式和装饰器模式的区别

也可以看作一种代理模式,GoF 的《设计模式》一书中把它称作远程代理。比如,有的场景下对 API 接口的安全性要求较高,那么就可以使用装饰模式对传输的字符串数据进行压缩或加密。除此之外,RPC 服务的开发者也只需要开发业务逻辑,就像开发本地使用的函数一样,不需要关注跟客户端的交互细节。对代理模式来说,代理类(proxy class)和真实处理的类(real class)都。当你将浏览器配置成使用代理功能时,防火墙就将你的浏览器的。控制对一个对象的访问,如果需要,可以给。,在被装饰之后你能够在被增强的类上。

u200814342A的博客 274

如何用 Claude Code 做大型项目重构与架构优化

本文介绍了如何利用Claude Code参与大型项目重构。文章指出,大型项目重构的最大难点在于理解系统结构和控制风险,而非单纯修改代码。作者提出了五步重构法:首先分析项目结构,其次梳理模块依赖关系,然后发现架构问题,接着设计分阶段重构方案,最后逐步实施。重点强调了Claude Code的核心价值在于帮助开发者理解复杂系统、分析模块依赖、发现结构问题、评估改动风险,而非仅作为代码生成工具。文章建议将Claude Code作为架构助手,通过分阶段小范围重构来降低风险,而非一次性全面重构。

sg_knight的专栏 1573

PINN:当深度学习遇上朗伯-比尔定律

光谱数据处理中引入PINN的三种架构设计

qq_53529450的博客 154

JAVA开发的23种设计模式之 —  装饰器模式 && 代理器模式

装饰器模式 概述 : 动态的给一个对象添加一些额外的职责,就增加功能来说,装饰器模式相比生成子类更加灵活维基百科解释 : 通过使用修饰模式,可以在运行时扩充一个类的功能.原理是 : 增加一个修饰类包裹原来的类,包裹的方式一般是通过在将原来的对象作为修饰类的构造函数的参数.装饰类实现新的功能,但是,在不需要用到新功能的地方,他可以直接调用原来的类中的方法.修饰类必须和原来的类有相同的接口.使

叶孤心的专栏 2842

C#解析基恩士(KEYENCE)PLC数据:KV协议通信与实时监控实现

KV协议是基恩士PLC使用的一种专用通信协议,通常用于与上位机进行数据交换。KV协议通过RS-232C、RS-485、Ethernet等接口与上位机通信,支持多种数据类型的读写,包括但不限于位、字、双字、浮点数等。简洁易用:KV协议的通信格式简单,易于实现。支持多种数据类型:支持位数据、字数据、定长字符串等。高效实时性:能够提供较高的实时数据交换性能,适合实时监控应用。本文介绍了如何通过C#与基恩士KV系列PLC进行通信,实现数据的解析和实时监控功能。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1808

装饰模式与代理模式的区别

这两个设计模式看起来很像。对装饰器模式来说,装饰者(decorator)和被装饰者(decoratee)都实现同一个 接口。对代理模式来说,代理类(proxy class)和真实处理的类(real class)都实现同一个接口。此外,不论我们使用哪一个模式,都可以很容易地在真实对象的方法前面或者后面加上自定义的方法。 然而,实际上,在装饰器模式和代理模式之间还是有很多差别的。装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问。换句话 说,用代理模式,代理类(proxy class

生而为人我很抱歉 1261

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

代理模式,装饰器模式,桥接模式的区别

代理模式和装饰器模式都持有RealObject(被代理的对象/被装饰的对象)   代理模式用于控制访问,即原本功能的执行与否取决于场景条件,对用户而言重要的是原本的功能 装饰器模式用于动态地添加职责,原本的功能必须执行,对用户而言重要的是添加的职责 桥接模式用于抽象和实现的分离,即从不同维度划分类的属性,以聚合的方式桥接,降低耦合。 与装饰器的区别在于装饰器是对 对象行为的扩展,对需求变...

codeeeLearner的博客 2195

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

代理模式 - 静态代理 VS 装饰者模式

Java开发中,代理模式应用广泛,比如 AOP 的实现原理、日志框架、全局性异常处理、事务处理等。本文先分析一下静态代理与装饰者模式的区别 //搜索了不少相关博文,不少把两者混淆,为了搞清楚,让我很是头大 区别: 对装饰器模式来说,装饰者(decorator)和被装饰者(decoratee)都实现同一个 接口。对代理模式来说,代理类(proxy class)和真实处理的类(real class)都实现同一个接口。他们之间的边界确实比较模糊,两者都是对类的方法进行扩展,具体区别如下: 装饰器模式强调的.

开拖拉机等春天的博客 755

代理模式详解

代理模式详解及区别

Groot-lin的博客 507

【设计模式】为什么装饰器模式能够取代继承?

什么是装饰器模式(Decorator ) 概念 装饰器模式(Decorator Pattern)属于结构型模式,是在不改变现有的对象结构(代码)的情况下,对这个对象动态添加一些新的职责(功能),希望通过用组合对象的方式替代继承的方式来实现对类的扩展。 我们看它的名字就知道,装饰器,像我们带的手表,就能够不影响我们,然后赋予我们看时间的能力。 装饰器模式是在不改变核心功能的基础上去新增一些新的功能,和代理模式非常地相似,在下面学习完如何实现装饰器模式后会做一下区分的总结。 优点 装饰器模式是继承的一种替代

程序员徐小白的博客 897

设计模式-----代理模式

代理模式           proxy,为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

有梦才叫青春 1431

代理模式

代理模式:分为静态代理、动态代理 组成: 抽象角色:通过接口或抽象类声明真实角色实现的业务方法。 代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。 真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。 优点: (1)、职责清晰 真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,...

tayngh的博客 275

[设计模式、C++、go]结构型模式:代理模式

文章目录代理模式 代理模式

这是书生呀 860

设计模式7:代理模式

联想远程代理,借助一中间过程,给出类似的访问接口,但是实际上,代理需要进行一步转发。 和其他设计模式的联系: 1)适配器模式Adapter:适配器Adapter 为它所适配的对象提供了一个不同的接口。相反,代理提供了与它的实体相同的接口。然而,用于访问保护的代理可能会拒绝执行实体会执行的操作,因此,它的接口实际上可能只是实体接口的一个子集。 2) 装饰器模式Decorat

瀚海一叶 620

设计模式

代理模式 将realImage通过proxyImage来调用。 realImage与proxyImage在功能上是等价的,没有新增和减少功能。   适配器模式  VlcPlayer, MP4Player的适配类。这样在AudioPlayer中只需要调用适配类来完成功能,同代理类的区别在于,AudioPlayer新增了适配的功能,代理类不能改变所代理类的功能。 适配器的核心在于将两个不相关的...

weixin_34040079的博客 66

设计模式-2 结构型模式

在软件开发中,桥接模式将两个独立变化的维度进行了解耦,不是将两者耦合在一起,形成多继承的结构。

ALLWE的博客 564
上一篇: Mysql易错知识点
下一篇: mysql常用的数据库连接池及用法
Crazy Code Farmer
博客等级 码龄10年 315粉丝 87原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值