责任链模式
package 责任链模式;
public interface 一个接口 {
public void sys();
}
package 责任链模式;
public class 一个类 implements 一个接口{
@Override
public void sys() {
// TODO 自动生成的方法存根
System.out.println("一个类执行了");
}
}
package 责任链模式;
import java.lang.reflect.Method;
public interface 拦截器接口 {
public boolean befor(Object proxy,Object tara, Method me,Object[] objs);
public void around(Object proxy,Object tara, Method me,Object[] objs);
public void after(Object proxy,Object tara, Method me,Object[] objs);
}
package 责任链模式;
import java.lang.reflect.Method;
public class 拦截器1 implements 拦截器接口{
@Override
public boolean befor(Object proxy, Object tara, Method me, Object[] objs) {
// TODO 自动生成的方法存根
System.out.println("拦截器1befor");
return true;
}
@Override
public void around(Object proxy, Object tara, Method me, Object[] objs) {
// TODO 自动生成的方法存根
}
@Override
public void after(Object proxy, Object tara, Method me, Object[] objs) {
// TODO 自动生成的方法存根
System.out.println("拦截器1after");
}
}
class 拦截器2 implements 拦截器接口{
@Override
public boolean befor(Object proxy, Object tara, Method me, Object[] objs) {
// TODO 自动生成的方法存根
System.out.println("拦截器2befor");
return true;
}
@Override
public void around(Object proxy, Object tara, Method me, Object[] objs) {
// TODO 自动生成的方法存根
}
@Override
public void after(Object proxy, Object tara, Method me, Object[] objs) {
// TODO 自动生成的方法存根
System.out.println("拦截器2after");
}
}
class 拦截器3 implements 拦截器接口{
@Override
public boolean befor(Object proxy, Object tara, Method me, Object[] objs) {
// TODO 自动生成的方法存根
System.out.println("拦截器3befor");
return true;
}
@Override
public void around(Object proxy, Object tara, Method me, Object[] objs) {
// TODO 自动生成的方法存根
}
@Override
public void after(Object proxy, Object tara, Method me, Object[] objs) {
// TODO 自动生成的方法存根
System.out.println("拦截器3after");
}
}
package 责任链模式;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class 动态代理 implements InvocationHandler{
Object obj = null;
String ljqm = null;
public 动态代理(Object obj ,String ljqm) {
this.obj = obj;
this.ljqm = ljqm;
}
public static Object ss(Object obj,String ljqm) {
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), new 动态代理(obj, ljqm));
}
@Override
public Object invoke(Object arg0, Method arg1, Object[] arg2) throws Throwable {
// TODO 自动生成的方法存根
if(ljqm == null) {
return arg1.invoke(obj, arg2);
}
Object obj = null;
拦截器接口 l= (拦截器接口) Class.forName(ljqm).newInstance();
if(l.befor(arg0, this.obj, arg1, arg2)) {
obj= arg1.invoke(this.obj, arg2);
}else {
l.around(arg0, this.obj, arg1, arg2);
}
l.after(arg0, this.obj, arg1, arg2);
return obj;
}
}
package 责任链模式;
public class 实现类 {
public static void main(String[] args) {
一个接口 s = (一个接口) 动态代理.ss(new 一个类(), "责任链模式.拦截器1");
一个接口 d = (一个接口) 动态代理.ss(s, "责任链模式.拦截器2");
一个接口 a = (一个接口) 动态代理.ss(d, "责任链模式.拦截器3");
a.sys();
}
}
运行结果:
拦截器3befor
拦截器2befor
拦截器1befor
一个类执行了
拦截器1after
拦截器2after
拦截器3after