一模式定义

在代理模式中,有两个对象参与处理同一请求,接收的请求由代理对象委托给真实对象处理,代理对象控制请求的访问,它在客户端应用程序与真实对象之间起到了一个中介桥梁的作用。代理模式使用对象聚合代替继承,有效地降低了软件模块之间的耦合度。

二模式举例

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 {// 生产红酒方法@Overridepublic 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;}// 代理商生产红酒方法(代理商不生产红酒,从真正的工厂拿酒销售)@Overridepublic void product() {// 判断代理商是否具有红酒代理权if (this.permission) {// 代理商有权限卖红酒 是合法的System.out.println("[ 这是合法的红酒代理商 ]");System.out.println("代理商接到订单,通知工厂生产...");this.redWine.product();} else {System.out.println("[ 这是非法的红酒代理商!]");}}// 代理商销售红酒方法@Overridepublic 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. java设计模式---代理模式

    代理模式:给某一对象提供代理对象,并由代理对象控制具体对象的引用. 代理,指的就是一个角色代表另一个角色采取行动,就象生活中,一个红酒厂商,是不会直接把红酒零售客户的,都是通过代理来完成他的销售业务的 ...

  2. Java—接口(工厂模式代理模式)

    程序1:简单的接口功能 package com.liaojianya.chapter2; /*** 编写程序实现一个usb接口,定义设备来使用这个接口,从而计算机可以调用具有usb接口的设备.* @a ...

  3. GOF23设计模式(结构型模式)代理模式~

    代理模式应用场景十分广泛,随便一个框架都会用到,因此学好代理模式对后续框架学习是最基本的要素!!今天我们就来讲讲代理模式! 目录 1.简介 1. 核心作用 2. 角色分析 2. 应用场景 4. 分类 ...

  4. Java 设计模式_代理模式(2016-08-19)

    概念: 代理模式是对象的结构模式.代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. 就是一个人或者机构代表另一个人或者机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一 ...

  5. ATS 5.3.0在反向代理模式下实现正向代理功能方法

    以前,我在records.config中一般是配置成正向+反向的形式: 现在我打算改为反向代理模式,但是需要实现正向代理的功能: 同时在remap.config中配置 regex_map http:/ ...

  6. 设计模式 之美 -- 代理模式

    文章目录 1. 解决问题 2. 应用场景 1. 业务系统的非功能性开发 2. 代理模式在RPC.缓存中的应用 3. 实现 C++实现 C语言实现 1. 解决问题 客户端和目标对象之间需要进行交互,此时 ...

  7. 设计模式之代理模式(Proxy Pattern)

    定义:为其他对象提供一种代理以控制这个对象的访问,也叫做委托模式. 咱们比作游戏,通俗讲代理模式就是,一个主题虚基类派生出两个子类,一个玩家类,实现相关操作,一个是代练类,代替执行玩家相关操作,代练类 ...

  8. 设计模式之“代理模式”

    代理(Proxy)模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用. 代理模式的英文叫做Proxy或Surrogate,中文都可译成"代理".所谓代理,就是一个人或者一 ...

  9. 设计模式之代理模式(Proxy)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

最新文章

  1. 注释很全的抽象工厂(没用简单工厂优化)
  2. CVPR 2021 Oral|只用静态图像,就能实时渲染出丝滑3D效果
  3. CSS 圣杯布局升级版---多个固定宽度一个自适应宽度
  4. django ajax上传文件
  5. pipfile和pipfile.lock、virtualenv、pipenv、pip
  6. ERROR 1044 (42000): Access denied for user ''@'localhost' to database
  7. 程序员生涯之我见 找到自己的兴趣所在 (zz)
  8. 计算机教师个人品德事迹材料,教师个人品德事迹材料
  9. vue+elementui 登录注册页面实现
  10. 使用OpenCV-python实现以图搜图
  11. python内置标准库不可以处理的文件是_精华 | 140种Python标准库、第三方库和外部工具都有了...
  12. 岩土工程勘察报告毕业设计论文
  13. 计算机毕业设计node.js+vue+Element电商后台管理系统
  14. Hexo-显示用户头像
  15. 15 Rest高级客户端实践(一):文档索引
  16. LTE路测优化工具介绍
  17. SSL 2331 洛谷 1717 信息学奥赛一本通 1373 鱼塘钓鱼#贪心#
  18. Java 根据开始日期和结束日期,获取日期之间的工作日,去除了周末和法定节假日
  19. PornNet:色情视频内容识别网络
  20. 安卓h5混合开发照片上传的问题

热门文章

  1. 如何开始写一本属于自己的技术书
  2. SecureCRT打开时,出现 告警的解决方法
  3. this.$parent
  4. Roson的Qt之旅#49 QML动画之Behavior
  5. 郑州中创|人才缺口超70万,多所高校新设区块链专业!
  6. 单元测试,驱动模块和桩模块的概念是什么?
  7. H3C QOS流量均衡
  8. EFCore-6 反向工程
  9. 某网站视频加密的wasm略谈(二)
  10. ajax传递list集合