为其他对象提供一种代理以控制对这个对象的访问
具体代码设计
1.定义一个接口
/**
* 创建一个共用接口
*/
public interface Subject {
public void request();
}
2.创建一个被代理的实体
/**
* 定义一个实体类,这个类将会被Proxy类代理
*/
public class RealSubject implements Subject {
@Override
public void request() {
System.out.println(this.getClass().getSimpleName() + "真实的请求");
}
}
3.创建一个代理实体
/**
* 创建一个代理类,去代理RealSubject
*/
public class Proxy implements Subject {
private RealSubject realSubject;
@Override
public void request() {
if (realSubject == null) {
realSubject = new RealSubject();
}
realSubject.request();
}
}
4.创建一个测试类
public class Test {
public static void main(String[] args) {
Proxy proxy = new Proxy();
//调用Proxy对象中方法,实际调用的是RealSubject类中的方法
proxy.request();
}
}
静态代理总结:
代理对象需要与目标对象实现一样的接口,一旦接口增加方法,目标对象与代理对象都要维护.
如何解决静态代理中的缺点呢?答案是可以使用动态代理方式
##代理模式和装饰者模式区别
1.两种模式的定义
代理模式:为其他对象提供一种代理以控制对这个对象的访问
装饰者模式:动态地给一个对象添加一些额外的职能
2.代理模式注重的是隔离限制,让外部不能访问你实际的调用对象.
装饰模式注重的是功能的拓展,在同一个方法下实现更多的功能。
|
|