责任链模式

it2022-05-26  67

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

转载于:https://www.cnblogs.com/xiaosuye/p/9657750.html

相关资源:数据结构—成绩单生成器

最新回复(0)