代理模式
<设计模式其实很简单>笔记
为其他对象提供一种代理以控制对这个对象的访问。
//抽象的父类
public abstract class Subject{
public abstract void Request();
}
//真实类
public class RealSubject extends Subject{
//覆盖父类的抽象方法
@Override
public void Request(){
System.out.println("the real request");
}
}
//代理类
public class Proxy extends Subject{
private RealSubject realSubject;
public Proxy(){
realSubject = new RealSubject();
}
@Override
public void Request(){
realSubject.Request();
}
}
//客户端代码
public static void main(String[] args){
Subject proxy = new Proxy();
proxy.Request();
}
//实际工作的是RealSubject类的对象,代理类Proxy作为一个桥梁隐藏了RealSubject对象的存在。
//代理模式是通过转发调用来实现的。也就是代理对象和被代理对象是紧耦合的。
③适用的地方:
当需要为一个对象在不同的地址空间提供局部的代表时
当需要创建开销非常大的对象时。
当需要控制对原始对象的访问时。
当需要在访问对象时执行一些附加操作时。
④Java中的代理模式
--静态代理
使用代理模式来实现。
--动态代理
动态生成代理对象。 与普通的代理模式的区别在于动态代理中的代理类是由java.lang.reflect.Proxy类在运行时根据接口定义,采用Java反射机制动态生成。和java.lang.reflect.InvocationHandler结合,可以加强现有类的方法实现。
动态代理的步骤:
>新建生成动态代理对象类,实现java.lang.reflect.InvocationHandler接口
>新建一个方法用于生成代理对象并返回该对象
>实现接口方法invoke,一般会将额外的操作置于此处