按职责来划分,通常有以下使用场景:
1、远程代理。
2、虚拟代理。
3、Copy-on-Write 代理。
4、保护(Protect or Access)代理。
5、Cache代理。
6、防火墙(Firewall)代理。
7、同步化(Synchronization)代理。
8、智能引用(Smart Reference)代理。
和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。
和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。
public class ProxyTest {
public static void main(String[] args) {
Sourceable source = new ProxyObject();
source.method();
ProxyHandler handler = new ProxyHandler(source);
Sourceable sourceable = (Sourceable) Proxy.newProxyInstance(ProxyObject.class.getClassLoader(),source.getClass().getInteces(),handler);
sourceable.method();
}
}public intece Sourceable {
void method();
}public class Source implements Sourceable {
@Override
public void method() {
System.out.println("the original method!");
}
}public class ProxyObject implements Sourceable {
private Source source;
public ProxyObject(){
super();
this.source = new Source();
}
@Override
public void method() {
before();
source.method();
after();
}
private void after() {
System.out.println("after proxy!");
}
private void before() {
System.out.println("before proxy!");
}
}public class ProxyHandler implements InvocationHandler {
private Sourceable sourceable;
public ProxyHandler(Sourceable subject){
this.sourceable = subject;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
before();
Object result = method.invoke(sourceable, args);
after();
return null;
}
private void after() {
System.out.println("after proxy!");
}
private void before() {
System.out.println("before proxy!");
}
}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33899-11.html
特么都不知道在后台下载什么鬼