Java经典设计模式之责任链模式原理与用法详解

  

本文实例讲述了Java经典设计模式之责任链模式。分享给大家供大家参考,具体如下:

  

<>强责任链模式:强多个对象由其对象对应下家的引用连成一条链,请求在这个链上传递,直到链上的某一个接收对象处理此请求。因为请求的客户端并不知道链上最终是谁来处理这个请求,使得系统可以在不影响客户端的情况下动态地重新组织和分配责任,从而避免了请求发送者与请求处理者之间的耦合。

  

责任链械中涉及到三种角色:

  

  

小例子:假设去买房子,买房子就需要砍价,卖房的人职位不同,可以优惠的价格也不同,不同职位就可以形成一个处理请求的链。我们暂定:*基层销售员,只能优惠3% *销售经理:可以优惠5% *销售总监:可以优惠8% *老板(老板):优惠

10%   

直接上代码:

     /* *   *抽象处理者(处理器)角色:处理请求的接口。如果需要,接口可以定义出一个方法以设定和返回对下家的引用。   *这个角色通常由一个Java抽象类或者Java接口实现。抽象方法handlePriceRequest()规范了子类处理请求的操作。   * @date 2015-12-24上午11:26:56   */公共抽象类RoomRateHandler {   保护RoomRateHandler mHandler;//直接由子类继承,用于传递请求   公共空间setPriceHandler (RoomRateHandler mHandler) {   this.mHandler=mHandler;   }//处理具体问题:处理价格请求   公共抽象空洞handlePriceRequest(浮动折扣);/* *   *设置请求处理链的层次关系,获取处理请求的对象   * @description:   * @date 2015-12-24上午11:51:54   */公共静态RoomRateHandler cretateHandler () {   RoomRateHandler推销员=new推销员();   RoomRateHandler salesManager=new salesManager ();   RoomRateHandler saleDirector=new SalesDirector ();   RoomRateHandler topManager=new topManager ();   salesMan.setPriceHandler (salesManager);   salesManager.setPriceHandler (saleDirector);   saleDirector.setPriceHandler (topManager);   返回推销员;   }   }      之前      

具体处理者(推销员)角色

     /* *   *具体处理者(推销员)角色:具体处理者(SalesDirector)角色:具体处理者收到请求后,可以选择处理请求,也可以将请求传给下家(上级)。   *具体处理者都持有对链上下家(上级)对象的引用,因此具体处理者把请求传递下去。   * @description:   * @date 2015-12-24上午11:29:16   */公共类销售员延伸RoomRateHandler {   @Override   公共空间handlePriceRequest(浮动折扣){   如果(discount<=0.03) {   System.out.format (“% s批准了:% .3f % n”、“业务员”,折扣);   其他}{   mHandler.handlePriceRequest(折扣);   }   }   }      之前      

具体处理者(SalesManager)角色

        公开课SalesManager延伸RoomRateHandler {   @Override   公共空间handlePriceRequest(浮动折扣){   如果(discount<=0.08) {   System.out.format (“% s批准了:% .3f % n”、“销售经理”,折扣);   其他}{   mHandler.handlePriceRequest(折扣);   }   }   }      之前      

具体处理者(SalesDirector)角色

        公开课SalesDirector延伸RoomRateHandler {   @Override   公共空间handlePriceRequest(浮动折扣){   如果(discount<=0.05) {   System.out.format (“% s批准了:% .3f % n”、“销售总监”,折扣);   其他}{   mHandler.handlePriceRequest(折扣);   }   }   }      之前      

具体处理者(TopManager)角色

     /* *   *具体处理者(TopManager)角色:因为当前角色已经处于链尾,所以是最终处理了。   * @description:   * @author ldm   * @date 2015-12-24上午11:29:16   */公开课TopManager延伸RoomRateHandler {   @Override   公共空间handlePriceRequest(浮动折扣){   如果(折扣& lt;=0.1) {   System.out.format (“% s批准了:%。3 f % n”、“老板”,折扣);   }   其他{   System.out.format (“% s不同意:%。3 f % n”、“老板”,折扣);   }   }   }      之前      

请求发送者

     /* *   *发出请求的客户(模拟买房子的人)   * @description:   * @author ldm   * @date 2015-12-24上午11:35:54   */公共类客户{   私人RoomRateHandler mHandler;   公共空间setPriceHandler (RoomRateHandler mHandler) {   这一点。mHandler=mHandler;   }   公共空间requestDiscount(浮动折扣){   mHandler.handlePriceRequest(折扣);   }   公共静态void main (String [] args) {   客户客户=新客户();   customer.setPriceHandler (RoomRateHandler.cretateHandler());//获取处理对象,站你面前的可能是老板,也可能是业务员……   随机随机=new随机();   for (int i=0;我& lt;8;我+ +){//随机构造8个买房子的人   system . out。println (i +“- - -”);   customer.requestDiscount (random.nextFloat()/10);//处理价格(谈判)   }   }   }      

Java经典设计模式之责任链模式原理与用法详解