一模式定义
在代理模式中,有两个对象参与处理同一请求,接收的请求由代理对象委托给真实对象处理,代理对象控制请求的访问,它在客户端应用程序与真实对象之间起到了一个中介桥梁的作用。代理模式使用对象聚合代替继承,有效地降低了软件模块之间的耦合度。
二模式举例
1模式分析
我们借用红酒经销来说明这一模式。
2代理模式静态类图
3代码示例
3.1红酒工厂接口一IRedWine
package com.demo.real; /** * 红酒接口 * * @author * */ public interface IRedWine { // 生产红酒方法 public void product(); // 销售酒方法 public void sell(); }
3.2红酒工厂实现一RealRedWineFactory
package com.demo.real.impl; import com.demo.real.IRedWine; /** * 真正的生产红酒工厂 * * @author * */ public class RealRedWineFactory implements IRedWine { // 生产红酒方法 @Override public void product() { System.out.println("红酒工厂生产红酒..."); } // 销售酒方法 public void sell() { System.out.println("红酒工厂销售红酒..."); } }
3.3创建红酒代理商一RedWineProxy
package com.demo.proxy; import com.demo.real.IRedWine; /** * 红酒代理商 * * @author * */ public class RedWineProxy implements IRedWine { // 真正的红酒生产厂商 private final IRedWine redWine; // 代理商出售红酒的权限 private final boolean permission = true; // 默认构造方法 public RedWineProxy(IRedWine redWine) { this.redWine = redWine; } // 代理商生产红酒方法(代理商不生产红酒,从真正的工厂拿酒销售) @Override public void product() { // 判断代理商是否具有红酒代理权 if (this.permission) { // 代理商有权限卖红酒 是合法的 System.out.println("[ 这是合法的红酒代理商 ]"); System.out.println("代理商接到订单,通知工厂生产..."); this.redWine.product(); } else { System.out.println("[ 这是非法的红酒代理商!]"); } } // 代理商销售红酒方法 @Override public void sell() { if (this.permission) { this.redWine.sell(); System.out.println("代理商从工厂拿到批发价红酒,然后以较高价格销售,从中赚取一定的差价..."); } else { System.out.println("[ 这是非法的红酒代理商!]"); } } }
3.4到红酒代理商处购买红酒一Client
package com.demo; import com.demo.proxy.RedWineProxy; import com.demo.real.IRedWine; import com.demo.real.impl.RealRedWineFactory; /** * 主应用程序 * * @author * */ public class Client { /** * @param args */ public static void main(String[] args) { // 创建真实红酒工厂对象实例 IRedWine realRedWineFactory = new RealRedWineFactory(); // 获得代理对象实例 IRedWine redWineProxy = new RedWineProxy(realRedWineFactory); // 代理商生产红酒(其实真正的生产的是工厂) redWineProxy.product(); // 代理商销售红酒(批发价拿货,然后较高价格出售,赚取差额利润) redWineProxy.sell(); } }
4运行结果
[ 这是合法的红酒代理商 ]
代理商接到订单,通知工厂生产...
红酒工厂生产红酒...
红酒工厂销售红酒...
代理商从工厂拿到批发价红酒,然后以较高价格销售,从中赚取一定的差价...
三该模式设计原则
1延迟加载,提高系统效率
2单一职责原则
四使用场合
1远程代理:为一个对象在不同地址空间提供局部代理。
2虚拟代理:若一个对象的创建非常耗时,可通过代理对象去调用,在真实对象创建前,返回一个假的调用,等真实对象创建好了,这时返回给客户瑞的就是一个真实对象相应方法调用。
3保护代理控制原始对象的访问。
4智能指引取代简单指针,它在访问对象时执行一些附加操作。
五代理模式静态类图
抽象角色:声明真实对象和代理对象的共同接口。
真实角色:真正处理请求的目标对象。
代理角色:代理对象角色内部含真实对象的引用,从而代理对象可以将请求转为真实对象处理。同时,代理对象在执行真实对象操作的前后,还可以添加附加操作。
相关推荐
《葡萄酒培训手册(初级)——葡萄酒入门篇》是一份针对初学者的葡萄酒知识指南,旨在帮助读者了解葡萄酒的基础知识,包括定义、分类、主要成分、保健功能以及主要生产国及其特点。以下是手册中的核心内容: 1. **...
SVM的数据分类预测—意大利葡萄酒种类识别的matlab源程序与数据 - SVM prediction data classification - Italian Wine type recognition matlab source code and data
标题中的“基于SVM的数据分类预测——意大利葡萄酒种类识别”是指使用支持向量机(Support Vector Machine, SVM)算法对意大利葡萄酒的种类进行预测的一种数据分析方法。SVM是一种监督学习模型,尤其在处理小样本、...
《葡萄酒培训手册(中级)——认识葡萄酒与葡萄酒品鉴》是一部深入浅出的教程,旨在帮助读者全面了解葡萄酒的世界。本手册涵盖了葡萄酒的定义、酿造过程、主要成分、分类,以及与葡萄酒相关的诸多方面,如葡萄品种、...
葡萄酒香气的世界丰富多彩,涵盖了许多化学和感官的细节。在了解葡萄酒香气之前,首先要明确香气的来源。香气主要是由于微小的挥发性物质刺激我们的嗅觉系统,这些物质来源于葡萄本身、酿造过程以及陈年过程。 葡萄...
这篇文档是关于数学建模在葡萄酒质量分析中的应用,作者在一次比赛中获得了一等奖。文档主要探讨了四个问题,涉及葡萄酒的评价、酿酒葡萄的分级、理化指标的关联以及如何用这些指标评价葡萄酒质量。 首先,针对问题...
葡萄酒培训手册(高级)——法国葡萄酒之波尔多.doc
决策树基础———wine红酒数据集实列.ipynb
在本课程中,我们将深入探讨如何使用Python进行数据分析,特别是在白葡萄酒品质分析方面。这个实践课题旨在帮助计算机科学与技术专业的学生掌握数据处理的核心技能。首先,我们需要理解数据集的内容和结构,然后运用...
综合以上分析,文档“互联网时代的葡萄酒营销——以宁夏天赋酒庄为例”旨在探讨在互联网背景下,企业如何运用SWOT分析、AHP-SWOT模型,结合B2B和B2C商业模式,借助最新的行业数据,制定和优化葡萄酒的市场营销策略。...
文件包含一个数据集(csv文件)和一个可执行代码(py文件),是对红酒数据集的分类训练与测试。可作为人工智能、机器学习初学者的学习资料。 模型训练基于逻辑回归算法,数据集和测试集按照8:2的比例进行划分。 数据...
在这个场景中,我们看到一个与意大利葡萄酒种类识别相关的项目,它利用SVM来进行数据分类预测。这个项目可能包含了从数据预处理、模型训练到预测评估等一系列步骤。 首先,数据集通常包含了关于意大利葡萄酒的各种...
总的来说,"matlab14 基于SVM的数据分类预测——意大利葡萄酒种类识别"项目是一个很好的学习资源,它将理论与实践相结合,使我们能够掌握SVM在数据分类任务中的应用,并且了解MATLAB在机器学习领域的强大功能。...
【标题】: 以财务现状预测未来发展——以张裕葡萄酒为例 【描述】: 这份资料探讨了如何利用企业的财务现状来预测其未来的发展趋势,以张裕葡萄酒这个具体的案例进行深入分析。通过研究公司的财务报表,我们可以了解...
《基于SVM的数据分类预测——意大利葡萄酒种类识别》 在这个项目中,我们主要探讨的是如何利用支持向量机(Support Vector Machine,简称SVM)这一机器学习算法对意大利葡萄酒进行种类识别。SVM是一种强大的监督...
《MATLAB神经网络43个案例分析:基于SVM的数据分类预测——意大利葡萄酒种类识别》 本案例研究涉及MATLAB编程环境中的神经网络与支持向量机(SVM)技术,用于解决实际问题——意大利葡萄酒种类的识别。MATLAB作为一...
标题中的“MATLAB编程 基于SVM的数据分类预测——意大利葡萄酒种类识别”涉及到的主要知识点是机器学习中的支持向量机(Support Vector Machine, SVM)以及如何利用MATLAB进行数据处理和预测模型构建。在这个项目中...
设计模式之代理模式 代理模式是结构型设计模式之一,它提供了一个对象的代理对象,以控制对原对象的访问。代理对象可以在客户端和目标对象之间起到中介的作用,可以通过代理对象去掉客户不能看到的内容和服务或者...
在本项目中,我们将深入探讨如何使用MATLAB编程实现基于支持向量机(SVM)的数据分类预测,特别是在意大利葡萄酒种类识别的应用上。MATLAB是一款强大的数学计算软件,广泛应用于科学计算、数据分析以及算法开发等...
利用随机森林评估特征重要性应用——以UCI葡萄酒为例,可扩展到故障诊断和状态评估领域 # 利用随机森林评估特征的重要性 #筛选出重要性比较高的变量 其中特征评估和变量筛选一直是故障诊断和状态评估领域的一个热门...