您的位置:首页 > 其它

设计模式读书笔记之代理模式(Proxy)

2016-04-25 09:22 459 查看
代理模式: 为其他对象提供代理以控制对该对象的访问.



示例代码:

[java] view
plain copy

//公共接口

package designpattern.proxy;

public interface Subject {

public void request();

}

//被代理类

package designpattern.proxy;

public class RealSubject implements Subject{

public void request() {

System.out.println("message from real object.");

}

}

//代理类

package designpattern.proxy;

public class ProxySubject implements Subject{

private Subject real;

public void request() {

preRequest();

if(real==null){

real = new RealSubject();

}

real.request();

postRequest();

}

private void preRequest(){

System.out.println("do something before request comes.");

}

private void postRequest(){

System.out.println("do something after request done.");

}

}

//test case

package designpattern.proxy;

public class Test {

public static void main(String[] args) {

Subject s = new ProxySubject();

s.request();

}

}

经典案例:

hibernate中Session.load(Class, id)加载的对象就是实际对象的代理对象,只有真正需要这个对象的时候才从数据库中查询。

jdk动态代理:

[java] view
plain copy

public class Test {

public static void main(String[] args){

Object o = Proxy.newProxyInstance(

TT.class.getClassLoader(),

new Class<?>[]{Subject.class},

new InvocationHandler(){

public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {

System.out.println("This is the proxy for method " + method.getName());

return null;

}

}

);

Subject s = (Subject)o;

s.request();

}

}

适应场景:远程代理, 安全代理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: