代理模式一般有三个角色:
1。抽象主题角色(interface or abstract class)
package ProxyPattern;
/**
* 抽象主题角色,定义了公共接口
* @author chenweicai
*
*/
public interface Merchant {
public void treat();
}
2。真实主题角色
package ProxyPattern;
/**
* 真实主题角色,实现了抽象主题接口
*
* @author chenweicai
*
*/
public class Director implements Merchant {
public Director() {
}
public void treat() {
// TODO Auto-generated method stub
System.out.println("董事长请大家吃饭!");
}
}
3。代理主题角色
package ProxyPattern;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
* 代理主题角色
*
* @author chenweicai
*/
public class Secretory implements InvocationHandler {
/**
* 定义真实主题
*/
private Director director;
public Secretory(Director director) {
this.director = director;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
director.treat();
System.out.println("由秘书来结帐哦!");
return null;
}
}
//---------------------------------------------------
Director director = new Director();
InvocationHandler secretory = new Secretory(director);
Merchant merchant = (Merchant) Proxy.newProxyInstance(director
.getClass().getClassLoader(), director.getClass()
.getInterfaces(), secretory);
merchant.treat();