23个设计模式之代理模式(1)

来源:互联网 发布:淘宝开店认证怎 编辑:程序博客网 时间:2024/05/17 04:50
package cn.com.dynamic;
/**
 * 抽象角色,声明真实对象和代理对象的共同接口
 */
public interface Subject {
public void request();

}


package cn.com.dynamic;
/**
 * 真实对象,代理角色所代表的真实对象,是我们最终要引用的对象
 * @author admin
 *
 */
public class RealSubject implements Subject{


public void request() {
System.out.println("我是真实对象");
}

}



package cn.com.dynamic;
/**
 * 代理角色,代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同事代理提供与真实对象相同的接口以便任何时候都能代替真实对象,同时,代理对象
 * 可以执行真实对象操作时附加的其他操作,相当于对真实对象进行了封装
 */
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;


public class DynamicSubject implements InvocationHandler {


private Object sb;


public DynamicSubject(Object sb) {
this.sb = sb;
}


public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("执行前交钱");
method.invoke(sb, args);
System.out.println("执行后交钱");
return null;
}


}


package cn.com.dynamic;
/**
 * 客户端使用
 */
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;


public class Client {

public static void main(String[] args) {

RealSubject realSubject = new RealSubject();
InvocationHandler handler = new DynamicSubject(realSubject);
Class<?> classType = handler.getClass();
//下面代码一次性生成代理
Subject subject = (Subject)Proxy.newProxyInstance(classType.getClassLoader(), realSubject.getClass().getInterfaces(), handler);
subject.request();
}

}


原创粉丝点击