代理模式

本文深入探讨了代理模式中的智能引用代理,通过静态代理的两种实现方式——继承和聚合,展示了如何为对象提供额外服务。文章提供了具体的Java代码示例,包括Car类的实现和智能引用代理的具体应用。

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

代理模式定义:

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

    代理对象起到中介作用,可以去掉功能服务或增加额外的服务。

代理模式分为:

远程代理,

虚拟代理,根据需要将资源消耗很大的对象进行延迟,真正需要的时候进行创建

保护代理,控制对一个对象的访问权限

智能引用代理:提供对目标对象额外的服务。

我们以智能引用代理为例来讲解。

智能引用代理有两种实现方式,静态代理和动态代理。

        静态代理:代理和被代理对象在代理之前是确定的。他们都实现了相同的接口或者继承相同的抽象类

    静态代理有两种实现方式:聚合,继承


public interface Moveable {

 public void move();

}

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 class Car2 extends Car {
 @Override
 public void move() {
  // TODO Auto-generated method stub
  
  long starttime = System.currentTimeMillis();
  System.out.println("汽车开始行驶.....");
  super.move();
  long endtime = System.currentTimeMillis();
  System.out.println("汽车结束行驶.....时间为:" + (endtime - starttime) + "(毫秒)");
 }
}

下面是聚合的方式


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

public class Client {

 /*

  * 测试类

  */

 public static void main(String[] args) {

//  Car car = new Car();

//  car.move();

  //使用继承方式

//  Moveable m = new Car2();

//  m.move();

  //使用聚合方式

  Car car = new Car();

  Moveable m = new Car3(car);

  m.move();

 }

}

我们一般不使用继承的方式代理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值