设计模式——责任链模式

306 阅读1分钟

最新修改已更新到github

责任链模式_通过链式调度实现(互相推卸责任)

/**
 * 过滤器
 * @author maikec
 * @date 2019/5/14
 */
public abstract class AbstractFilter {
    private AbstractFilter next;

    public AbstractFilter setNext(AbstractFilter next){
        this.next = next;
        return next;
    }

    /**
     * 过滤行为
     * @param req
     * @return
     */
    protected abstract Boolean doFilter(String req);
    public void initChain(String req){
        doFilter(req);
        if (null != next){
            next.initChain( req );
        }
    }
}

/**
 * @author maikec
 * @date 2019/5/14
 */
public class DecodeFilter extends AbstractFilter {
    @Override
    protected Boolean doFilter(String req) {
        System.out.println( "DecodeFilter" );
        return true;
    }
}

/**
 * @author maikec
 * @date 2019/5/14
 */
public class EncodeFilter extends AbstractFilter {
    @Override
    protected Boolean doFilter(String req) {
        System.out.println( "EncodeFilter" );
        return true;
    }
}

/**
 * @author maikec
 * @date 2019/5/14
 */
public class LoginFilter extends AbstractFilter {
    @Override
    protected Boolean doFilter(String req) {
        if (StrUtil.equals( "maikec",req )){
            System.out.println( "LoginFilter" );
            return true;
        }
        return false;
    }
}

/**
 * @author maikec
 * @date 2019/5/14
 */
public class LogoutFilter extends AbstractFilter {
    @Override
    protected Boolean doFilter(String req) {
        if ("maikec".equals( req )){
            return true;
        }
        return false;
    }
}

/**
 * @author maikec
 * @date 2019/5/14
 */
public class ResponsibilityDemo {
    public static void main(String[] args) {
        AbstractFilter loginFilter = new LoginFilter();
        EncodeFilter encodeFilter = new EncodeFilter();
        DecodeFilter decodeFilter = new DecodeFilter();
        LogoutFilter logoutFilter = new LogoutFilter();

        loginFilter.setNext( encodeFilter ).setNext( decodeFilter ).setNext( logoutFilter );
        loginFilter.initChain( "maikec" );

        loginFilter.setNext( encodeFilter ).setNext( decodeFilter );
        loginFilter.initChain( "maikec" );
    }
}

附录

github.com/maikec/patt… 个人GitHub设计模式案例

声明

引用该文档请注明出处