设计模式-代理模式

定义: 为其他对象提供一种代理来控制这个对像的访问.

IGamePlayer : 抽象的接口

GamePlayer  : 实际的业务逻辑实现对象

GameProxy : 代理对象.

一 . 普通代理:

 代理类和被代理类继承同一个接口,代理类包含被代理类,用代理类执行时实际跑被代理类的方法。

public class Proxy implements Subject {
private RealSuject rSub;

public Proxy(){
rSub = new RealSuject();
}
public void request(String s) {
/*此处新增RealSuject,不考虑多线程*/
if(rSub == null){
rSub = new RealSuject();
}
System.out.println("proxy function before call the real object");
rSub.request(s);
System.out.println("proxy function after call the real object");
}

}

二.强制代理类

类接口包含判断是否是代理的方法,被代理类只有指定了代理才能被访问,否则不能被访问。

三.动态代理

public class MyInvocationHandler implements InvocationHandler {

private Object p ;
public MyInvocationHandler(Object pro)
{
this.p = pro;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
return method.invoke(this.p, args);
}

}

public class DynamicProxy<T> {
public static <T>T newProxyInstance(ClassLoader cl,
Class<?>[]interfaces,MyInvocationHandler mih){
return (T)Proxy.newProxyInstance(cl, interfaces, mih);
}
}

public static void main(String[] args) {
// TODO Auto-generated method stub
Subject s = new RealSuject();
MyInvocationHandler mh = new MyInvocationHandler(s);
Subject proxy = DynamicProxy.newProxyInstance(s.getClass().getClassLoader(),
s.getClass().getInterfaces(), mh);
proxy.request("hello");
}

使用的是java的代理基本方法。Proxy InvocationHandler

 

 

posted @ 2014-07-01 23:23  thinkqin  阅读(151)  评论(0编辑  收藏  举报