首页 > 其他分享 >代理模式

代理模式

时间:2022-12-12 16:33:52浏览次数:38  
标签:move System 模式 代理 Moveable println public out


组成:



抽象角色:通过接口或抽象类声明真实角色实现的业务方法。



代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。



真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
实例:记录日志和汽车行驶的时间

/**
* 汽车运动接口
*/
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毫秒


日志结束。。。




标签:move,System,模式,代理,Moveable,println,public,out
From: https://blog.51cto.com/u_12026373/5930808

相关文章

  • 观察者模式
    观察者模式的定义定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖它的对象都得到通知并被自动更新。推模型目标对象主动向观察者推送目标的详细信息......
  • 模板方法模式
    1.概述定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。2.模式中的角色2.1抽象类(Ab......
  • 适配器模式
    适配器模式定义:适配器模式将一个类的接口,转化成客户期望的另一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。适配器分类1组合采用组合方式的适配......
  • rxjs究竟是观察者模式还是发布订阅模式
    rxjs源代码Subscriber.ts,里面对Subscriber的定义:exportclassSubscriberextendsSubscriptionimplementsObserverrxjs里面观察者模式还是发布订阅模式?观察者模式和发......
  • DataGrid CRUD(MVVM模式)
    引用程序包:MvvmLight实体类:publicclassStudent:ViewModelBase{privateintid;privatestringname;publicintId{......
  • 采用无线网桥做监控有什么优势?无线网桥的组网模式有哪些?
     无线网桥顾名思义就是无线网络的桥接,它利用无线传输方式实现在两个或多个网络之间相互连接,无线网桥从通信机制上分为电路型网桥和数据型网桥。无线网桥通常用来应用在无线......
  • 【秒杀购物商城业务服务】「分布式架构服务」盘点中间件服务的高可用模式及集群技术的
    秒杀购物商城业务服务-分布式架构介绍基于MySQL数据库集群技术实现服务的高可用基于Tomcat的集群负载机制实现Tomcat服务器的高可用基于Nginx负载均衡机制实现负载均衡......
  • 【秒杀购物商城业务服务】「分布式架构服务」盘点中间件服务的高可用模式及集群技术的
    秒杀购物商城业务服务-分布式架构介绍基于MySQL数据库集群技术实现服务的高可用基于Tomcat的集群负载机制实现Tomcat服务器的高可用基于Nginx负载均衡机制实现负载均衡(介绍......
  • 前端_js设计模式
    什么是设计模式1.什么是设计模式设计模式是前人总结出的,解决开发中某类问题的方法;我们在过去的代码编写中已经接触过很多的设计模式了,只不过当时咱们不知道这就......
  • Windows系统下HTTP(S)透明代理
    软件文档地址:​​https://github.com/snail007/goproxy/blob/master/README_ZH.md​​一、windows系统下进行下载及安装分别有两个版本:proxy-admin 和 goproxy,技术人员推......