栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

动态代理+责任链模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

动态代理+责任链模式

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;


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 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;
    }

}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/346142.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号