package DPCOR;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.List;
/**
* 假设有一个保存数据的方法 保存前需要2次验证,保存后需要1次验证
*
* @author renguanyu
*
*/
public class ProxyCORDemo {
public static void main(String[] args) {
System.out.println("============ 动态代理 + 责任链 =============");
// 示例数据
Emp e1 = new Emp("1", "liubei");
EmpDao empImpl = new EmpImpl();
Filter filter1 = new Filter1(empImpl);// 验证1
Filter filter2 = new Filter2(empImpl);// 验证2
Filter filter3 = new Filter3(empImpl);// 业务处理
Filter filter4 = new Filter4(empImpl);// 验证3
FilterChain filterChain = new FilterChain();
filterChain.addFilter(filter1);
filterChain.addFilter(filter2);
filterChain.addFilter(filter3);
filterChain.addFilter(filter4);
EmpDao empDao = (EmpDao) Proxy.newProxyInstance(Emp.class.getClassLoader(), new Class[] { EmpDao.class },
filterChain);
empDao.save(e1);
}
}
class Emp {
String id;
String name;
public Emp(String id, String name) {
super();
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Emp [id=" + id + ", name=" + name + "]";
}
}
interface EmpDao {
void save(Emp e);
}
class EmpImpl implements EmpDao {
@Override
public void save(Emp e) {
System.out.println("save - > " + e);
}
}
interface Filter {
void doFilter(Object proxy, Method method, Object[] args, FilterChain filterChain) throws Throwable;
}
class Filter1 implements Filter {
private Object object;
public Filter1(Object object) {
this.object = object;
}
@Override
public void doFilter(Object proxy, Method method, Object[] args, FilterChain filterChain) throws Throwable {
System.out.println("验证1 - OK ");
filterChain.invoke(proxy, method, args);
}
}
class Filter2 implements Filter {
private Object object;
public Filter2(Object object) {
this.object = object;
}
@Override
public void doFilter(Object proxy, Method method, Object[] args, FilterChain filterChain) throws Throwable {
System.out.println("验证2 - OK ");
filterChain.invoke(proxy, method, args);
}
}
class Filter3 implements Filter {
private Object object;
public Filter3(Object object) {
this.object = object;
}
@Override
public void doFilter(Object proxy, Method method, Object[] args, FilterChain filterChain) throws Throwable {
System.out.println("执行业务逻辑 ↓ ");
Object o = method.invoke(object, args);
System.out.println("执行业务逻辑 ↑ ");
filterChain.invoke(proxy, method, args);
}
}
class Filter4 implements Filter {
private Object object;
public Filter4(Object object) {
this.object = object;
}
@Override
public void doFilter(Object proxy, Method method, Object[] args, FilterChain filterChain) throws Throwable {
System.out.println("验证3 - OK ");
filterChain.invoke(proxy, method, args);
}
}
class FilterChain implements InvocationHandler {
List<Filter> filters = new ArrayList<>();
int index = 0;
public void addFilter(Filter f) {
filters.add(f);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (index == filters.size())
return null;
Filter filter = filters.get(index);
index++;
filter.doFilter(proxy, method, args, this);
return null;
}
}
动态代理+责任链模式
最新推荐文章于 2024-06-18 17:35:38 发布