Java设计模式编程中的责任链模式使用示例

 更新时间:2016年05月07日 09:47:56   作者:匆忙拥挤repeat  
这篇文章主要介绍了Java设计模式编程中的责任链模式使用示例,责任链模式可以避免很多请求的发送者和接收者之间的耦合关系,需要的朋友可以参考下

责任链模式:多个对象由其对象对应下家的引用连成一条链,请求在这个链上传递,直到 链上的某一个接收对象处理此请求。因为请求的客户端并不知道链上最终是谁来处理这个请求,使得系统可以在不影响客户端的情况下动态地重新组织和分配责任, 从而避免了请求发送者与请求处理者之间的耦合。
责任链械中涉及到三种角色:
1,抽象处理者角色
2,具体处理者角色
3,请求发送者
小例子:假设去买房子,买房子就需要砍价, 卖房的人职位不同,可以优惠的价格也不同,不同职位就可以形成一个处理请求的链。我们暂定: * 基层销售员,只能优惠3% * 销售经理:可以优惠5% * 销售总监:可以优惠8% * 老板(Boss):优惠10%

Java实例
类图:

20165794216522.jpg (686×324)

/** 
 * 抽象责任 
 */ 
public abstract class IFilter { 
  private IFilter successor; 
 
  public IFilter getSuccessor() { 
    return successor; 
  } 
 
  public void setSuccessor(IFilter successor) { 
    this.successor = successor; 
  } 
   
  public abstract void handleFilter(); 
   
  public abstract void handleFilter2(); 
} 

/** 
 * 具体责任 
 */ 
public class ConcreteFilter extends IFilter { 
   
  private String name; 
  public ConcreteFilter(String name) { 
    this.name = name; 
  } 
   
  @Override 
  public void handleFilter() { 
    /* 
     * 自己先处理,如有后继者,再由它处理一次 
     */ 
    System.out.println(name + " 处理了请求"); 
    if (getSuccessor() != null) { 
      getSuccessor().handleFilter(); 
    } 
  } 
   
  @Override 
  public void handleFilter2() { 
    /* 
     * 有后继者就后继者处理, 否则自己处理 
     */ 
    if (getSuccessor() != null) { 
      getSuccessor().handleFilter2(); 
    } else { 
      System.out.println(name + " 处理了请求"); 
    } 
  } 
} 

public class Test { 
  public static void main(String[] args) { 
    IFilter filter1 = new ConcreteFilter("permission-filter");//权限过滤 
    IFilter filter2 = new ConcreteFilter("suffix-filter");//后缀名过滤 
    IFilter filter3 = new ConcreteFilter("style-filter");//风格过滤 
    filter1.setSuccessor(filter2); 
    filter2.setSuccessor(filter3); 
    System.out.println("------以下是每一个处理者(包括后继者)都处理了, 顺序也是一级一级的传递------"); 
    filter1.handleFilter(); 
     
    System.out.println("------以下是交由最后一个后继者处理------"); 
    filter1.handleFilter2(); 
     
  } 
} 


打印:

------以下是每一个处理者(包括后继者)都处理了, 顺序也是一级一级的传递------ 
permission-filter 处理了请求 
suffix-filter 处理了请求 
style-filter 处理了请求 
------以下是交由最后一个后继者处理------ 
style-filter 处理了请求 

相关文章

  • java巧用@Convert实现表字段自动转entity

    java巧用@Convert实现表字段自动转entity

    本文主要介绍了java巧用@Convert实现表字段自动转entity,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • java读取大文件简单实例

    java读取大文件简单实例

    这篇文章主要介绍了java读取大文件简单实例,有需要的朋友可以参考一下
    2013-12-12
  • Spring Boot使用Hibernate-Validator校验参数时的长度校验方法详解

    Spring Boot使用Hibernate-Validator校验参数时的长度校验方法详解

    这篇文章主要给大家介绍了关于Spring Boot使用Hibernate-Validator校验参数时的长度校验方法的相关资料,在Spring Boot中可以使用Spring Boot Validation来对参数名称进行校验,需要的朋友可以参考下
    2023-08-08
  • mybatis-plus与mybatis共存的实现

    mybatis-plus与mybatis共存的实现

    本文主要介绍了mybatis-plus与mybatis共存的实现,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 微信APP支付(IOS手机端+java后台)版

    微信APP支付(IOS手机端+java后台)版

    这篇文章主要为大家详细介绍了微信APP支付(IOS手机端+java后台)版,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • java微信开发中的地图定位功能

    java微信开发中的地图定位功能

    本文通过实例代码给大家介绍了java微信开发中的地图定位功能,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-07-07
  • springboot启动不加载bootstrap.yml文件的问题

    springboot启动不加载bootstrap.yml文件的问题

    这篇文章主要介绍了springboot启动不加载bootstrap.yml文件的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Spring中的@EnableWebSecurity注解详解

    Spring中的@EnableWebSecurity注解详解

    这篇文章主要介绍了Spring中的@EnableWebSecurity注解详解,EnableWebSecurity注解是个组合注解,它的注解中,又使用了@EnableGlobalAuthentication注解,需要的朋友可以参考下
    2023-12-12
  • SpringBoot中项目如何读取外置logback配置文件

    SpringBoot中项目如何读取外置logback配置文件

    这篇文章主要介绍了SpringBoot中项目如何读取外置logback配置文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 简单了解java volatile

    简单了解java volatile

    这篇文章主要介绍了了解java volatile,volatile是Java提供的一种轻量级的同步机制,在并发编程中,它也扮演着比较重要的角色。下面我们来一起学习一下吧
    2019-05-05

最新评论