设计模式之五:代理模式(Proxy Pattern)
2013-04-19 16:57
351 查看
(GOF)书上 代理模式:给某一对象提供代理对象,并由代理对象控制具体对象的引用. 代理模式
是对象结构型模式。
public class MethodProxy {
private Class clazz; //对象所属的类
private Object target; //目标对象
private Method method; //目标方法
private Object[] params; //参数数组
@SuppressWarnings("unchecked")
public MethodProxy(Object target, String methodName, Object ... params) {
rebindTarget(target, methodName, params); //设置目标对象与方法
}
// 重新设置目标对象与方法
public void rebindTarget(Object target, String methodName, Object ... params) {
this.target = target;
this.clazz = target.getClass();
rebindMethod(methodName, params); //设置目标方法
}
// 重新设置目标方法
public void rebindMethod(String methodName, Object ...params) {
this.params = params;
int paramLength = params.length;
Class[] paramTypes = new Class[paramLength];
for(int i = 0 ; i < paramLength ; i ++ ) {
paramTypes[i] = params[i].getClass();
}
try {
this.method = clazz.getMethod(methodName, paramTypes);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
// 动态调用已绑定的方法
public void doMethod() {
try {
this.method.invoke(target, params);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
public class Manager {
public void say() {
System.out.println("Nobody say nothing");
}
public void love(String boy, String girl) {
System.out.println(boy + " love " + girl);
}
}
//代理类
public class TestProxy {
public static void main(String[] args) {
Manager man = new Manager(); //目标对象
MethodProxy proxy = new MethodProxy(man, "say"); //方法代理对象
proxy.doMethod(); //调用被代理的方法
proxy.rebindMethod("love", "Tom", "Marry"); //重新绑定方法
proxy.doMethod(); //调用被代理的方法
}
}
是对象结构型模式。
public class MethodProxy {
private Class clazz; //对象所属的类
private Object target; //目标对象
private Method method; //目标方法
private Object[] params; //参数数组
@SuppressWarnings("unchecked")
public MethodProxy(Object target, String methodName, Object ... params) {
rebindTarget(target, methodName, params); //设置目标对象与方法
}
// 重新设置目标对象与方法
public void rebindTarget(Object target, String methodName, Object ... params) {
this.target = target;
this.clazz = target.getClass();
rebindMethod(methodName, params); //设置目标方法
}
// 重新设置目标方法
public void rebindMethod(String methodName, Object ...params) {
this.params = params;
int paramLength = params.length;
Class[] paramTypes = new Class[paramLength];
for(int i = 0 ; i < paramLength ; i ++ ) {
paramTypes[i] = params[i].getClass();
}
try {
this.method = clazz.getMethod(methodName, paramTypes);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
// 动态调用已绑定的方法
public void doMethod() {
try {
this.method.invoke(target, params);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
public class Manager {
public void say() {
System.out.println("Nobody say nothing");
}
public void love(String boy, String girl) {
System.out.println(boy + " love " + girl);
}
}
//代理类
public class TestProxy {
public static void main(String[] args) {
Manager man = new Manager(); //目标对象
MethodProxy proxy = new MethodProxy(man, "say"); //方法代理对象
proxy.doMethod(); //调用被代理的方法
proxy.rebindMethod("love", "Tom", "Marry"); //重新绑定方法
proxy.doMethod(); //调用被代理的方法
}
}
相关文章推荐
- 二十四种设计模式:代理模式(Proxy Pattern)
- 设计模式原来如此-代理模式(Proxy Pattern)
- 23种设计模式(12)_结构型_代理模式(Proxy Pattern)
- 设计模式—静态代理模式和动态代理模式(Proxy Pattern)
- 【设计模式】学习笔记15:代理模式(Proxy Pattern)
- 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)
- C#设计模式之代理模式(Proxy Pattern)
- 代理对象我所理解的设计模式(C++实现)——代理模式(Proxy Pattern)
- 设计模式之代理模式(Proxy Pattern)
- JAVA设计模式之 代理模式【Proxy Pattern】
- 【编程素质】设计模式-代理模式(委托模式、Proxy Pattern):动态扩充对象功能
- 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)
- 设计模式学习笔记十六:代理模式(Proxy Pattern)
- 设计模式学习——代理模式(Proxy Pattern)之 强制代理(强校验,防绕过)
- 设计模式之 - 代理模式(Proxy Pattern)
- 设计模式(18):代理模式 Proxy Pattern
- 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)
- 设计模式学习——代理模式(Proxy Pattern)
- 设计模式-代理模式(Proxy Pattern)
- Java设计模式——代理模式(PROXY PATTERN)