简单理解常用设计模式(五)代理模式

深入理解Java设计模式:代理模式实例解析 在软件设计领域,设计模式是一套被反复使用、多数人知晓、分类编目、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。代理模式作为一种行为型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。设计模式按照目的和范围主要分为三大类:创建型模式:提供创建对象的机制,增加程序的灵活性和可创建性。- 单例模式- 工厂方法模式- 抽象工厂模式- 建造者模式- 原型模式结构型模式:关注类和对象的组合。 阅读详情

代理模式:为其他对象提供一种代理,以控制对这个对象的访问

这里说明代理模式,这是一个平常开发自己不太会用到,但实际作用不小的模式。

以原书送礼物为场景:人物a要给人物b送礼物,但又不想让人物b知道是自己送的,所以找来了人物c来代替自己送礼物。

UML如下:


调用类如下:

package com.gcc.proxyModel;
/**
 * 代理模式
 *
 */
public class TestProxy {

	public static void main(String[] args) {
		BeautifulGirl girl = new BeautifulGirl("翠花");
		Proxy prox = new Proxy(girl);
		prox.giveBags();
		prox.giveDolls();
		prox.giveFlowers();
		
	}
	
}

人物b类如下:

package com.gcc.proxyModel;

public class BeautifulGirl {

	private String name;

	public BeautifulGirl() {
		super();
	}
	
	public BeautifulGirl(String name) {
		super();
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	
	
}

人物c类如下:

package com.gcc.proxyModel;

public class Proxy implements ProxyAction{

	ActualMaster master;
	
	public Proxy() {
		super();
	}

	/**
	 * 让代理(人)知道要追个那个女生,实例化真正的追求者对象,代替他执行那些送礼物的动作
	 * @param girl
	 */
	public Proxy(BeautifulGirl girl) {
		master=new ActualMaster(girl);
	}

	@Override
	public void giveDolls() {
		master.giveDolls();
	}

	@Override
	public void giveFlowers() {
		master.giveFlowers();
	}

	@Override
	public void giveBags() {
		master.giveBags();
	}

	
	
}

共用接口如下:

package com.gcc.proxyModel;

public interface ProxyAction {

	public void giveDolls();
	public void giveFlowers();
	public void giveBags();
	
}

人物a类如下:

package com.gcc.proxyModel;

public class ActualMaster implements ProxyAction {

	BeautifulGirl girl;
	
	public ActualMaster() {
		super();
	}

	/**
	 * 初始化真正的追求者,并且初始化被追求的人的姓名,用来显示打印
	 * @param girl
	 */
	public ActualMaster(BeautifulGirl girl) {
		super();
		this.girl = girl;
	}

	@Override
	public void giveDolls() {
		System.out.println(this.girl.getName()+"送你玩偶");
	}

	@Override
	public void giveFlowers() {
		System.out.println(this.girl.getName()+"送你花");
	}

	@Override
	public void giveBags() {
		System.out.println(this.girl.getName()+"送你包");
	}

}

设计思路非常清晰,让代理类知道(包含)真正送礼物的类ActualMaster,然后两者都实现送礼物接口,在代理类里执行ActualMaster对象的方法,达到送礼物的目的。而翠花是不知道究竟是谁送的,只知道代理对象。

实际应用场景也不少,笔者举常见的两例:

一、虚拟代理,例如HTML图片的异步加载,那些未打开的图片框就是通过虚拟代理来替换的真实的图片,此时代理主要储存了真实图片的路径和尺寸

二、安全代理,用来控制真实对象访问时的权限

代理也可以理解成委托,在自己不想参与某个操作或不会某个操作时可以通过代理来完成。

openlayers6【十九】vue HeatmapLayer热力图层实现热力图效果详解 文章目录1. 写在前面2. Heatmap 类实现热力图2.1 Heatmap 参数2.2 实现热力图3. 完整代码4. 添加删除map图层的方法5. 热力图自身的get,set方法 1. 写在前面 我们主要看热力图的效果,区域绘制效怎么设置详细内容可以访问 openlayers6【十七】vue VectorLayer矢量图层画地图省市区,多省市区(粤港澳大湾区)效果详解 在 openlayers 中,图层是使用 layer 对象表示的,主要有 WebGLPoints Layer、热度图(HeatMap L 阅读详情

相关推荐

Altium Designer差分走线实战:从规则设置到阻抗匹配的完整流程

本文详细讲解了在Altium Designer中进行差分走线的完整实战流程,涵盖从原理图定义差分对、PCB布局管理、关键设计规则设置,到利用阻抗计算工具确定线宽与间距,以及布线技巧与等长处理等核心步骤。文章旨在帮助工程师掌握高速PCB设计中差分信号传输的关键技术,确保信号完整性并实现精确的阻抗匹配。

weixin_29163857的博客 257

1.设计模式_代理模式(Proxy Pattern)

代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,所访问的真实对象与代理对象需要实现相同的接口。根据代理模式的使用目的不同,代理模式又可以分为多种类型,例如保护代理、远程代理、虚拟代理、缓冲代理等,它们应用于不同的场合,满足用户的不同需求。 15.1 代理模式概述        近年来,代购已逐步成为电...

lizhenxiqnmlgb的博客 322

Quanto option期权公式推导(更新中)

Quanto期权不同于以标的股票或资产的计价货币支付最终收益的普通欧式期权,它以另一种货币以预先确定的汇率支付最后的收益。以股票B的计价货币来计价的quanto看涨期权的收益为F0×max⁡(Sa(T)−K,0)×Sb(T)F_0 \times \max(S_a(T)-K, 0) \times S_b(T)F0​×max(Sa​(T)−K,0)×Sb​(T) 其中SaS_aSa​以货币A计价,SbS_bSb​以货币B计价,F0F_0F0​是预先固定的汇率. 假设上述股票均遵循几何布朗运动,可以得到以下恒等式

qq_41782124的博客 3683

设计模式之代理设计模式简单实践

1.顶级接口类--定义共性规则 package com.git.base.designpatterns.proxy; /** * * Title: ReadBook.java * Description:代理设计模式之 代理抽象类 * Copyright: Copyright (c) 2016 * Company: Sage * @author 五虎将 * @date 2016

筑梦者 546

手把手教你用ESP32驱动MAX30102心率血氧传感器(含完整代码)

本文详细介绍了如何使用ESP32微控制器驱动MAX30102心率血氧传感器,构建智能健康监测系统。内容涵盖PPG原理、硬件连接、驱动配置、信号处理算法以及Web服务器数据可视化,提供完整代码实现,帮助开发者快速上手物联网健康设备开发。

weixin_29208077的博客 587

百度贴吧爬虫实战:完整实现与使用指南

使用 csv 模块创建写入器,首先写入表头("标题" 和 "链接"),然后遍历帖子字典,将每个标题和链接作为一行写入文件。首先检查内容是否为空,然后通过查找 JSON 结构的起始({)和结束(})位置,提取有效的 JSON 片段。接着遍历帖子列表中的每个条目,提取标题文本和对应的链接,对于相对路径的链接会自动补全为完整的 URL。从 JSON 提取标题和链接此方法专门用于从解析后的 JSON 数据中提取帖子标题和对应的链接。提取到的标题和链接以字典形式返回,键为标题,值为对应的完整链接。

qq_63736560的博客 2016

简单了解代理设计模式(Proxy)

        代理设计模式是在Java开发中使用的较多的一种设计模式。所谓代理设计模式是指一个代理主题来操作真实主题,真实主题执行具体的业务操作,而代理主题负责其它相关业务的处理。好比生活中经常使用到的代理上网,客户通过网络代理连接网络,由代理服务器完成用户权限,访问限制等与上网相关的操作。interface Network { public void browse(); } class Re...

bingocoder的博客 828

内存泄漏系列专题分析之二十三:meminfo无法统计到的黑洞内存泄漏分析

内存泄漏系列专题分析之二十三:meminfo无法统计到的黑洞内存泄漏分析

683

浅谈代理设计模式

浅谈代理模式 一、什么是代理 用例子来说理解起来总是简洁的: 比如你觉得上分太累了,但是又想上分,怎么办?请代练(代理). 医院挂号太麻烦?请黄牛(代理)帮我们挂号. 写出威胁社会安定的代码被请到警察局喝茶?请律师(代理)帮我们打官司. 借用某大佬的话来说,代理就是当前对象不愿意干、没法干的事委托给别的对象来做,而我们只要做好本分就行了。 二、简单的示例代码 1.静态代理 一个描述职能接口: ...

qq_39237781的博客 154

【箱子之字形摆放】python实现-附ChatGPT解析

箱子之形摆放有一批箱子(形式为宁符串,设为str) ,要求将这批箱子按以之形的顺序摆放在宽度为n的空地,请输出箱子的摆放结果。例如:箱子为ABCDEFG,空地宽度为3,摆放结果如图:则输出结果为:AFGBECD输入一行字符串,通过空格分制,前面部分为字母或数字组成的字符串str,表示;后面部分为一个数字n,表示。ABCDEFG 3箱子摆放结果,如题目示例所示AFGBECD。

sinat_29950703的博客 371

OpenTK简介

OpenTK 因其强大的功能、跨平台特性和灵活性,适用于多种需要图形和计算能力的应用场景,为开发者提供了丰富的可能性和创作空间。

仰望星空的博客 1980

如何简单描述java中的代理模式

java里什么是代理比如A是一个接口,B是被加强对象,C是代理对象A接口有一个say()方法,B实现了A接口,C也实现了A接口,C在自己实现的say()方法里不但执行了B的say()方法也执行了一些自己的程序,这就是代理。代理分为静态代理和动态代理。为什么要代理类的增强可以通过继承来实现,那如果想让某个方法增强呢?这时候就用到代理了。如何代理?大体上有目标类,代理类,增强(通知),连接点。代理类在...

入门菜鸟程序员的成长 944

Windows 下 Hermes Agent(爱马仕)安装全记录:从零到一的保姆级图文教程

本文主要介绍了Windows 下 Hermes Agent(爱马仕) 安装全记录:从零到一的保姆级图文教程,希望能对学习使用 Hermes Agent 的同学们有所帮助。 文章目录 1. 背景 2. 实战教程 2.1 步骤一 安装WSL环境 2.2 步骤二 安装Python环境 2.3 步骤三 安装Hermes Agent 2.4 步骤四 修正 API Key 错误 2.5 步骤五 配置多个模型 2.6 步骤六 启动Hermes Agent 3. 常见问题及解决方案 4. 总结

weixin_43178406的博客 14万+

DesignPattern设计模式

本文主要介绍了设计模式相关内容。包括软件设计的SOLID原则,设计模式的分类,单例模式的思想与实现,工厂模式的思想与实现,建造者模式的思想与实现,代理模式的思想与实现,责任链模式的思想与实现等内容。供个人学习使用。

专注Java和MySQL领域知识分享 1881

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

设计模式之代理模式的理解

设计模式之代理模式的理解

来自上海的这位朋友 4386

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

设计模式之代理模式(ProxyPattern)

设计模式之代理模式(ProxyPattern) 文章目录设计模式之代理模式(ProxyPattern)一.代理模式(ProxyPattern)二.编程实例1.图片读取案例2.String类访问修饰符[]读写操作区分案例 一.代理模式(ProxyPattern) 代理模式是创建一个代理类,来帮助我们处理真实类,一般来说,这种代理类有点像明星的经纪人,如果你想接触到明星,必须先和他们的经纪人打交道。...

Worthy_Wang的博客 476

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

九大常用设计模式学习-代理模式

设计模式学习记录:一句话+代码体会设计模式。 九大常用设计模式 单例模式:https://blog.youkuaiyun.com/qq_37902949/article/details/87903569 简单工厂/静态工厂方法模式:https://blog.youkuaiyun.com/qq_37902949/article/details/87931684 工厂方法模式:https://blog.csdn.n...

Lover 494

深入理解JavaScript设计模式之代理模式

为一个对象提供一个代用品或者占位符,以便控制对他的访问。 你想干一件事,但是你不方便亲自出马,于是你找了个“替身”帮你搞定,这个“替身”就是你的“代理”,再俗一点可以理解为——“媒婆”

前端开发工程师 1076

常用工厂设计模式之代理模式---用几个demo就能理解的代理模式

常用工厂设计模式之代理模式---用几个demo就能理解的代理模式一、什么是代理二、静态代理1、代理类和目标类实现同一个接口建一个接口建一个目标类建一个代理类测试运行结果2、代理类继承目标类修改一下代理类修改一下目标类测试运行结果三、动态代理1、目标类实现接口---jdk代理接口目标类实现接口JdkProxy代理类(这里相对比较难理解)测试运行结果2、目标类没有实现接口---cglib代理目标类cglib代理类测试运行结果四、由程序自己动态生成的代理类 首先我们要知道,工厂设计模式分为三类:创建型模式、行为型

weixin_46816383的博客 1601

常用设计模式系列(八)—代理模式

代理机制的安全性与便捷性,可以为项目增添更多便捷,进来看看如何使用代理模式吧!

Java之路艰难,要以高内聚低耦合的目标去设计 871

Android常用设计模式-代理模式

代理模式是Java中常用的设计模式之一,主要用于为其他对象提供一种代理以控制对这个对象的访问。

maoning20080808的专栏 747

深入理解设计模式之代理模式

代理模式,简单来说,就是为其他对象提供一种代理以控制对这个对象的访问。在某些场景下,一个对象可能由于各种原因(如对象创建开销大、对象位于远程服务器等),不适合或者不能直接被客户端引用,而代理对象则可以在客户端和目标对象之间充当一个中介的角色,客户端通过代理对象来间接访问目标对象。这就好比我们在生活中通过房产中介来寻找合适的房子,房产中介就是代理对象,它帮助我们与房东(目标对象)进行沟通和协调,控制我们对房东的访问,同时也为我们提供了一些额外的服务,如筛选房源、安排看房等。

weixin_45969711的博客 719

设计模式之代理模式

代理设计模式(Proxy Pattern)是面向对象软件设计中的一种常用模式,它属于结构型设计模式。代理设计模式的主要目的是为其他对象提供一种代理以控制对这个对象的访问。以下是对代理设计模式的详细介绍:

1288

【五】Python 代理模式

代理通常就是一个介于请求方和提供方之间的中介系统。在设计模式的上下文中,代理是充当实际对象接口的类。对象类型可以是多样化的,例如网络连接、内存和文件中的大对象,等等。简而言之,代理就是封装实际服务对象的包装器或代理人。代理可以为其包装的对象提供附加功能,而无需更改对象的代码。

勿忘初心方得始终 1708

代理模式

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。 介绍 意图:为其他对象提供一种代理以控制对这个对象的访问。 主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者...

ThinkWon的博客 7059

常用设计模式之代理模式【简单易懂】

1、静态代理 代理对象与目标对象一起实现相同的接口或者继承相同父类,它由程序员创建或特定工具自动生成源代码 2、动态代理 动态代理的代理类是在程序运行时创建的通过动态的方式来生成,运用了反射机制,不是我们直接 手动生成............

不爱熬夜的朱霸霸的博客 518
上一篇: 简单理解常用设计模式(四)装饰模式
下一篇: 简单理解常用设计模式(六)工厂模式
gcc_front
博客等级 码龄9年 16粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值