代理模式 Proxy Pattern 委托模式

Provide a surrogate or placeholder for another object to control access to it.

为其他对象提供一种代理以控制对这个对象的访问。

抽象主题角色(Subject):该角色是真实主题和代理主题的共同接口,以便在任何可以使用真实主题的地方都可以使用代理主题。

package com.DesignPattern.Structural.Proxy;public interface Subject {// 定义一个请求方法public void request();
}

代理主题角色(Proxy Subject):也叫做委托类,代理类,该角色负责控制对真实主题的引用,负责在需要的时候创建或删除真实主题对象,并且在真实主题角色处理完毕前后做预处理和善后处理工作。

package com.DesignPattern.Structural.Proxy;public class ProxySubject implements Subject {private Subject subject;public ProxySubject(Subject subject) {this.subject = subject;}// 实现请求方法@Overridepublic void request() {this.beforeRequest();subject.request();this.afterRequest();}//请求前的操作private void beforeRequest() {// 预处理}//请求后的操作private void afterRequest() {// 善后处理}
}

真实主题角色(Real Subject):该角色也叫做被委托角色、被代理角色,是业务逻辑的具体执行者。

package com.DesignPattern.Structural.Proxy;public class RealSubject implements Subject {@Overridepublic void request() {// 业务处理逻辑System.out.println("realSubject request");}
}

代理模式的实例

IGamePlayer.java

package com.DesignPattern.Structural.Proxy;public interface IGamePlayer {public void killBoss();// 杀怪public void upGrade();// 升级
}

GamePlayer.java

package com.DesignPattern.Structural.Proxy;public class GamePlayer implements IGamePlayer {private String name = "";public GamePlayer(String name) {this.name = name;}@Overridepublic void killBoss() {System.out.println(this.name + " killBoss");}@Overridepublic void upGrade() {System.out.println(this.name + " upgrade level 1");}}

GamePlayerProxy.java

package com.DesignPattern.Structural.Proxy;import java.util.Date;public class GamePlayerProxy implements IGamePlayer {private IGamePlayer player=null;public GamePlayerProxy(IGamePlayer player){this.player=player;}//记录打怪时间private void log(){System.out.println("打怪时间"+new Date().toString());}@Overridepublic void killBoss() {this.log();player.killBoss();}@Overridepublic void upGrade() {player.upGrade();this.count();}//计算升级所用的时间private void count(){System.out.println("upgrade cost time!");}}

ClientDemo.java

package com.DesignPattern.Structural.Proxy;public class ClientDemo {public static void main(String[] args){IGamePlayer player=new GamePlayer("Tom");IGamePlayer proxy=new GamePlayerProxy(player);proxy.killBoss();proxy.upGrade();}
}

转载于:https://www.cnblogs.com/javafly/p/6037112.html

DesignPattern_Java:Proxy Pattern相关推荐

  1. 【java项目实战】代理模式(Proxy Pattern),静态代理 VS 动态代理

    这篇博文,我们主要以类图和代码的形式来对照学习一下静态代理和动态代理.重点解析各自的优缺点. 定义 代理模式(Proxy Pattern)是对象的结构型模式,代理模式给某一个对象提供了一个代理对象,并 ...

  2. 设计模式笔记15:代理模式(Proxy Pattern)

    一.代理模式的内容        代理模式为另一个对象提供一个替身或占位符以访问这个对象.         给某一个对象提供一个代理,并由代理对象控制对原对象的引用.代理模式的英文叫做Proxy或Su ...

  3. 二十四种设计模式:代理模式(Proxy Pattern)

    代理模式(Proxy Pattern) 介绍 为其他对象提供一个代理以控制对这个对象的访问. 示例 有一个Message实体类,某对象对它的操作有Insert()和Get()方法,用一个代理来控制对这 ...

  4. C#设计模式之十二代理模式(Proxy Pattern)【结构型】

    一.引言 今天我们要讲[结构型]设计模式的第七个模式,也是"结构型"设计模式中的最后一个模式,该模式是[代理模式],英文名称是:Proxy Pattern.还是老套路,先从名字上来 ...

  5. Proxy Pattern using C# (转载)

    Proxy Pattern(代理模式)属于Structural Pattern(结构型模式),Proxy Pattern-为Client真正要调用的对象提供一个代理(Surrogate or plac ...

  6. Net设计模式实例之代理模式(Proxy Pattern)

    一.代理模式简介(Brief Introduction) 代理模式(Proxy Pattern)对其他对象提供一种代理以控制对这个对象的访问. 二.解决的问题(What To Solve) 1.远程代 ...

  7. DP-代理模式(Proxy Pattern)

    代理模式(Proxy Pattern)<?XML:NAMESPACE PREFIX = O /> --.NET设计模式系列之十四 Terrylee,2006年5月 摘要:在软件系统中,有些 ...

  8. Java24种设计模式(第二种)--代理模式(Proxy Pattern)

    Java24种设计模式 (第二种) 一.代理模式(Proxy Pattern) 模式逻辑: 什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道 被代理人能做哪些事 ...

  9. Android常见设计模式——代理模式(Proxy Pattern)(二)

    文章目录 1. 前言 2. 远程代理(Remote Proxy) 3. 后记 1. 前言 在上篇Android常见设计模式--代理模式(Proxy Pattern)中基本上知道了什么是代理模式,以及对 ...

最新文章

  1. 太强了,手撸一款导弹跟踪算法(Python版)
  2. Collections接口下的Comparetor类和Comparable接口排序
  3. 透彻理解块级元素的宽度
  4. Lesson 4.34.4 梯度下降(Gradient Descent)基本原理与手动实现随机梯度下降与小批量梯度下降
  5. 【数据清洗】yolo标注补全 生成空的标注txt文件
  6. publiccms实现多层级选项卡效果
  7. 灾难 BZOJ 2815
  8. 练习答案-分支与循环-超市买苹果练习-猜数字小游戏
  9. 20190911:(leetcode习题)计数质数
  10. 数据结构-栈的实现之括号匹配检测
  11. STM32:红外遥控接收模块
  12. Mysql日志与备份以及恢复
  13. hibernate 学习笔记-操作数据库
  14. 《富爸爸财务自由之路》阅读笔记
  15. 基于.Net Core Web MVC的图书查询系统——第四章,添加模型并使用EF Core生成基架自动生成控制器和视图
  16. Unity中导出apk文件
  17. 金银岛(信息学奥赛一本通 - T1225)
  18. Scrapy vs BeautifulSoup
  19. centos7部署prometheus+exporter+grafana+Alertmanager+企业微信
  20. iOS 逆向编程(九 - 1)通过 USB 连接登录 iPhone 以及端口映射

热门文章

  1. 单纯形法求解函数极值问题 matlab代码
  2. 计算机标准化管理制度,计算机中心标准化管理.doc
  3. Java研发知识图谱
  4. DeFi货币市场协议DMM宣布因监管部门的要求,已停止运营
  5. 机器学习:用梯度下降法实现线性回归
  6. FusionCharts 技术文档-Jsp画图例子
  7. ImageMagick的下载和配置
  8. hdu5791(DP)
  9. pom.xml 配置maven私服
  10. MySQL数据库性能优化的关键参数(转)