首页 > 编程语言 > 详细

JAVA中的责任链模式(CH02)

时间:2017-11-23 20:48:42      阅读:286      评论:0      收藏:0      [点我收藏+]

对责任链CH01做出优化,解决耦合度太高问题

记得上一篇我们使用的是抽象类,然后用子类去继承的方法实现等级的桥接,从而发现了耦合度太高。

  为了解决这个问题。

  我们本次使用接口进行抽象,然后使用到一个”中介“对所要申请的经费进行自动判断。

  这个类似于web的过滤器。让我们来Look一Look吧!

 

一,首先我们创建一个接口,抽象出审批费用的方法

public interface AbstractHandler {
    //抽象审批经费的方法,这里有两个参数
    //第一个参数是:申请经费
    //第二个参数是:处理链接的类,也就是中介
    void execute(int money,HandlerChain chain);

}

二,创建三个等级,分别实现AbstractHandler接口

a) money<=200

public class HandlerA implements AbstractHandler {
    @Override
    public void execute(int money,HandlerChain chain) {
        if(money<=200){//对经费进行判断
            System.out.println("A审核通过…………");
        }else{
            //如果审批权限不够,则去上一级领导申请,
            chain.doFilter(money);
        }
    }
}

b)money<=500

public class HandlerB implements AbstractHandler {
    @Override
    public void execute(int money,HandlerChain chain) {
        if(money<=500){
            System.out.println("B审核可以通过…………");
        }else{
         chain.doFilter(money); } } }

 c)money<=1000

public class HandlerC implements AbstractHandler {
    @Override
    public void execute(int money,HandlerChain chain) {
        if(money<=1000){
            System.out.println("C审核通过…………");
        }else{
            chain.doFilter(money);
        }
    }
}

 

三,最主要的是这个分配中介,也就是链接处理

public class HandlerChain {

    //用来存放所有Handler实例 泛型是抽象接口
    private List<AbstractHandler> list= new ArrayList<AbstractHandler>();

    //定义一个迭代器,用来迭代list集合
    private Iterator<AbstractHandler> it;

    /**
     * 使用构造方法初始化责任链
     * 将子类实例化添加到list里面
     */
    public HandlerChain(){
        list.add(new HandlerA());
        list.add(new HandlerB());
        list.add(new HandlerC());
        it = list.iterator();
    }
  
   
   /**
     * 对list里面的审批经费权限进行判断
     * @param money
     */
   public void doFilter(int money){
        if(it.hasNext()){//如果有下一个就执行
            //使用list里面被实例化过的方法,在这里子类方法里面有一个判断
            //如果审批成功这输出,如果审批经费超出权限,这回都这里执行下list里面的下一个子类方法;
            it.next().execute(money,this);
        }
   }


}

三,有了这个中介后,我们的主方法就可以减少过多的耦合了

public class Main {
    public static void main(String[] args) {
        //实例化一个中介,在中介里面直接申请经费
      HandlerChain chain = new HandlerChain();
      chain.doFilter(50);
    }
}

 

输出结果:A审核通过…………

 

JAVA中的责任链模式(CH02)

原文:http://www.cnblogs.com/javaLin/p/7886665.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!