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简单实现SpringMVC+MyBatis分页插件

    Java简单实现SpringMVC+MyBatis分页插件

    自己最近搭建的一个SpringMVC+Mybatis的框架 属于无实体类的框架 并实现了Myabtis的自动分页和总数查询 只要传入分页参数便能自动查询总数和分页 总数封装在参数里面执行查询后可以直接从参数中获取
    2015-09-09
  • Kotlin基础教程之数据类型

    Kotlin基础教程之数据类型

    这篇文章主要介绍了Kotlin基础教程之数据类型的相关资料,需要的朋友可以参考下
    2017-05-05
  • Java中Dijkstra算法求解最短路径的实现

    Java中Dijkstra算法求解最短路径的实现

    Dijkstra算法是一种解决最短路径问题的常用算法,本文主要介绍了Java中Dijkstra算法求解最短路径的实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • Spring Boot整合MyBatis连接Oracle数据库的步骤全纪录

    Spring Boot整合MyBatis连接Oracle数据库的步骤全纪录

    这篇文章主要给大家介绍了关于Spring Boot整合MyBatis连接Oracle数据库的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • JAVA8独有的map遍历方式(非常好用)

    JAVA8独有的map遍历方式(非常好用)

    这篇文章主要介绍了JAVA8独有的map遍历方式(非常好用),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 超细致讲解Spring框架 JdbcTemplate的使用

    超细致讲解Spring框架 JdbcTemplate的使用

    在之前的Javaweb学习中,学习了手动封装JdbcTemplate,其好处是通过(sql语句+参数)模板化了编程。而真正的JdbcTemplate类,是Spring框架为我们写好的。它是 Spring 框架中提供的一个对象,是对原始 Jdbc API 对象的简单封装。
    2021-09-09
  • ZooKeeper命令及JavaAPI操作代码

    ZooKeeper命令及JavaAPI操作代码

    ZooKeeper是一个树形目录服务,其数据模型和Uiix的文件目录树很类似,拥有一个层次化结构,这篇文章主要介绍了ZooKeeper命令及JavaAPI操作代码,需要的朋友可以参考下
    2023-03-03
  • 关于jdk环境变量的配置方式解读

    关于jdk环境变量的配置方式解读

    这篇文章主要介绍了关于jdk环境变量的配置方式解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • JavaSwing后台播放音乐mp3

    JavaSwing后台播放音乐mp3

    这篇文章主要为大家详细介绍了JavaSwing后台播放音乐mp3,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Flink自定义Sink端实现过程讲解

    Flink自定义Sink端实现过程讲解

    这篇文章主要介绍了Flink自定义Sink端实现过程,在Fink官网中sink端只是给出了常规的write api.在我们实际开发场景中需要将flink处理的数据写入kafka,hbase kudu等外部系统
    2023-01-01

最新评论