代理模式简介
别称:委托模式
英文:Proxy Pattern
类型:结构型设计模式
定义:为某个实际对象提供一种代理,通过代理对象可以访问实际对象
使用场景
1、静态代理用于对原有对象的业务逻辑进行补充(需求增加必备)
2、无法访问实际的对象,可通过代理对象间接访问实际对象
实现思路
1、代理类与实际类实现同一个接口
2、代理类的构造方法传入实际对象,每个代理对象负责持有实际对象
3、代理类与实际类为了实现同一个接口,可以继承同一个抽象类
4、代理类与实际类为了实现同一个接口,可以实现同一个interface
代码实现(静态代理)
1、定义代理类与实际类共用的接口类(抽象类、interface均可以),该类也被称为《抽象主题类》
public interface Action {
public void doSomething();
}
2、定义实际类(也称被委托类、或者被代理类),并实现同一个接口Action
public class RealObject implements Action{
@Override
public void doSomething() {
System.out.println("do something");
}
}
3、定义代理类(也称委托类),并实现同一个接口Action
public class Proxy implements Action {
private Action realObject;
public Proxy(Action realObject) {
this.realObject = realObject;
}
@Override
public void doSomething() {
System.out.println("proxy pre do");
realObject.doSomething();
System.out.println("proxy done!!!!");
}
}
4、运行代码(伪代码)
RealObject real = new RealObject();
Proxy proxy = new Proxy(real);
proxy.doSomething();
首先创建实际类的对象
然后创建代理类对象(需传入真实类对象)
调用代理对象的doSomething()方法
代理模式和装饰器模式的区别
1、代理模式强调的是为实际对象增加一些额外的功能,与实际对象本身应该提供的功能没有关系
2、装饰器模式强调增加的是实际对象自身应该提供的功能,与实际对象有直接的关系
代理模式的高级实现
使用Java的反射技术,动态生成代理类对象…………动态代理专题里再展现吧……