使用聚合的方式实现静态代理

本文介绍了Java中代理模式的应用,通过Car类及其代理类CarTimeProxy和CarLogProxy的实例,展示了如何在不修改原有代码的基础上增加新的功能,如计时和日志记录。通过不同的组合方式,灵活地满足了需求变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

我们有一个Car类,其中有一个行驶的方法实现了一个接口。


import java.util.Random;
public class Car implements Moveable {
 @Override
 public void move() {
  // TODO Auto-generated method stub
  try {
   Thread.sleep(new Random().nextInt(1000));
   System.out.println("汽车行驶中.....");
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}

public interface Moveable {

 public void move();

}

我们又有一个计时的类,并且实现了接口:


public class CarTimeProxy implements Moveable {
 
 private Moveable m;
 public CarTimeProxy(Moveable m) {
  super();
  this.m = m;
  System.out.println("CarTimeProxy:"+m);
 }
 @Override
 public void move() {
  // TODO Auto-generated method stub
  long starttime = System.currentTimeMillis();
  System.out.println("汽车开始行驶.....");
  m.move();
  long endtime = System.currentTimeMillis();
  System.out.println("汽车结束行驶.....时间为:" + (endtime - starttime) + "(毫秒)");
 }
}

我们同样有一个记录日志的类,实现了行驶的接口:


public class CarLogProxy implements Moveable {
 private Moveable m;
 public CarLogProxy(Moveable m) {
  super();
  this.m = m;
  System.out.println("CarLogProxy:m"+m);
 }
 @Override
 public void move() {
  // TODO Auto-generated method stub
  System.out.println("日志开始.....");
  m.move();
  System.out.println("日志结束.....");
 }
}

假设我们有这样一个需求:

想要先开始记录日志,然后开始计时,然后再开始行驶汽车


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();

 }

}

输出结果为:

日志开始.....
汽车开始行驶.....
汽车行驶中.....
汽车结束行驶.....时间为:565(毫秒)
日志结束.....
如果我们改变需求:先开始计时然后在开始记录日志,再行驶。那么我们可以这样修改:


public class Client {

 /*

  * 测试类

  */

 public static void main(String[] args) {

  Car car = new Car();

  CarLogProxy clp = new CarLogProxy(car);

  CarTimeProxy ctp = new CarTimeProxy(clp);

  ctp.move();

 }

}

输出结果为:

汽车开始行驶.....
日志开始.....
汽车行驶中.....
日志结束.....
汽车结束行驶.....时间为:321(毫秒)

我们可以仅仅做很少的修改,就实现了代码的变动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值