1. 程式人生 > 實用技巧 >注入理解依賴注入(控制反轉)

注入理解依賴注入(控制反轉)

package com.test.chain;
import java.util.ArrayList;
import java.util.List;

public class BizFilterChain { /** * 執行器集合 */ public List<BizFilter> bizFilters; /** * 執行器下標 */ private int pos; public void addFilter(BizFilter bizFilter){ this.bizFilters.add(bizFilter); }
public BizFilterChain(){ this.bizFilters = new ArrayList<>(); } public void process(BizRequest request, BizResponse response){ this.pos++; if (bizFilters.size() >= pos) { BizFilter nextBizFilter = this.bizFilters.get(pos-1); nextBizFilter.filter(request, response,
this); } }; }

具體的處理器:

package com.test.chain;
public abstract class AbstractFilter implements BizFilter {
    @Override
    public void filter(BizRequest request, BizResponse response, BizFilterChain chain) {
        if (condition(request,response)) {
            this.doFilter(request, response, chain);
        }
else { //此處為了繼續執行下一個處理器,跟dofilter裡的process作用一致 chain.process(request,response); } } /** * 條件判斷作為是否執行此filter的准入條件,具體子類需要實現 * @param request * @param response * @return */ public abstract boolean condition(BizRequest request, BizResponse response); /** * 子類的具體實現邏輯 * @param request * @param response * @param chain */ public abstract void doFilter(BizRequest request, BizResponse response, BizFilterChain chain); }
public interface BizFilter {

    /**
     * 執行方法
     * @param request
     * @param response
     * @param chain
     */
    void filter(BizRequest request, BizResponse response,BizFilterChain chain);

}
/**
 * 具體的引數傳遞物件
 * @author chenwei
 * @date 2018/12/17 10:29
 * @Description
 */
public class BizRequest {
}
package com.test.chain;

/**
 * 結果返回物件
 * @author chenwei
 * @date 2018/12/17 10:29
 * @Description
 */
public class BizResponse {
}
package com.test.chain;

/**
 * @author chenwei
 * @date 2018/12/17 10:30
 * @Description
 */
public class Demo1Filter extends AbstractFilter {
    @Override
    public void doFilter(BizRequest request, BizResponse response,BizFilterChain chain) {

        System.out.println("demo1 已經處理過");
        //執行這個是為了能繼續執行下一個filter,如果想直接返回的話,結束執行,則直接return,不執行process方法
        chain.process(request, response);
    }

    @Override
    public boolean condition(BizRequest request, BizResponse response) {
        return true;
    }
}
package com.test.chain;

/**
 * @author chenwei
 * @date 2018/12/17 10:30
 * @Description
 */
public class Demo2Filter extends AbstractFilter {
    @Override
    public boolean condition(BizRequest request, BizResponse response) {
        return true;
    }

    @Override
    public void doFilter(BizRequest request, BizResponse response,BizFilterChain chain) {
        System.out.println("demo2 已經處理過");
        chain.process(request,response);
    }

}
package com.test.chain;

/**
 * @author chenwei
 * @date 2018/12/17 10:30
 * @Description
 */
public class Demo3Filter extends AbstractFilter {
    @Override
    public boolean condition(BizRequest request, BizResponse response) {
        return true;
    }
    @Override
    public void doFilter(BizRequest request, BizResponse response,BizFilterChain chain) {
        System.out.println("demo3 已經處理過");
        chain.process(request,response);
    }
}
package com.test.chain;

/**
 * @author chenwei
 * @date 2018/12/17 10:42
 * @Description
 */
public class BizExecuter {


    public static void main(String[] args) {
        Demo1Filter demo1 = new Demo1Filter();
        Demo2Filter demo2 = new Demo2Filter();
        Demo3Filter demo3 = new Demo3Filter();

        BizFilterChain chain = new BizFilterChain();

        chain.addFilter(demo1);
        chain.addFilter(demo2);
        chain.addFilter(demo3);
        BizRequest request = new BizRequest();
        BizResponse response = new BizResponse();
        chain.process(request, response);
    }
}