代理模式
来源:互联网 发布:高胜算交易策略 知乎 编辑:程序博客网 时间:2024/05/29 13:01
组成:
抽象角色:通过接口或抽象类声明真实角色实现的业务方法。
代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
实例:记录日志和汽车行驶的时间
测试:
汽车开始行驶。。。
汽车行驶中。。。
汽车结束行驶。。。
汽车行驶时间:508毫秒
日志结束。。。
实例:记录日志和汽车行驶的时间
/** * 汽车运动接口 */public interface Moveable { void move();}
/** * 汽车类,实现运动的具体逻辑 */public class Car implements Moveable{ @Override public void move() { try { Thread.sleep(new Random().nextInt(1000)); System.out.println("汽车行驶中。。。"); } catch (InterruptedException e) { e.printStackTrace(); } }}
/** * 代理类,记录日志 */public class CarLogProxy implements Moveable{ private Moveable m; public CarLogProxy(Moveable m){ this.m=m; } @Override public void move() { System.out.println("日志开始。。。"); m.move(); System.out.println("日志结束。。。"); }}
/** * 代理类,记录行驶时间 */public class CarTimeProxy implements Moveable{ private Moveable m; public CarTimeProxy(Moveable m){ super(); this.m=m; } @Override public void move() { long starttime=System.currentTimeMillis(); System.out.println("汽车开始行驶。。。"); m.move(); long endtime=System.currentTimeMillis(); System.out.println("汽车结束行驶。。。"); System.out.println("汽车行驶时间:"+(endtime-starttime)+"毫秒"); }}
测试:
public class Client { /** * 测试类 */ public static void main(String[] args){ Car car=new Car(); CarTimeProxy ctp=new CarTimeProxy(car); CarLogProxy clp=new CarLogProxy(ctp); clp.move(); }}日志开始。。。
汽车开始行驶。。。
汽车行驶中。。。
汽车结束行驶。。。
汽车行驶时间:508毫秒
日志结束。。。
0 0
- 代理模式--动态代理
- 代理模式-静态代理
- 代理模式-静态代理
- 代理模式 & 动态代理
- 代理模式--静态代理
- 代理模式--动态代理
- 代理模式(动态代理)
- 代理模式-动态代理
- 代理模式-动态代理
- 代理模式动态代理
- 代理模式-静态代理
- 代理模式-动态代理
- 代理模式 -动态代理
- 代理模式---动态代理
- 代理模式-动态代理
- 代理模式--静态代理
- 代理模式!
- 代理模式
- 特种兵数据库手抄
- CNN中使用SVM进行分类(keras的实现)
- Unity MMO游戏架构设计之角色设计二
- 数据挖掘包
- 树莓派学习-I2c通信
- 代理模式
- 第31课:彻底解密Spark 2.1.X中Shuffle中内存管理源码解密:StaticMemory和UnifiedMemory
- 1059
- 控制朋友圈好友状态可见性(Python+redis实现)
- 华为机试专辑【11-15题】
- shell写循环ssh登陆多机执行命令
- ccs5.4安装说明
- 金牌、银牌、铜牌--链表
- 20个令人惊叹的深度学习应用