扩展阅读
 
当前位置:  编程语言>java/jsp

GOF设计模式简介- 责任链模式

 
    发布时间:2014-1-13  


    本文导语:  在软件构建构成中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接收者,如果显示指定,将必不可少地带来请求发送者与接收者的紧密耦合。COR(Chain of Reposibility)设计模式可以使请求的发送者不...

   在软件构建构成中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接收者,如果显示指定,将必不可少地带来请求发送者与接收者的紧密耦合。COR(Chain of Reposibility)设计模式可以使请求的发送者不需要指定具体的接收者,让请求的接收者自己在运行时决定来处理请求,从而使两者解耦。  

  官方描述:

  使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。



使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象对应它为止。

“Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object 设计模式 iis7站长之家 it.” - GoF

 

Java代码示例:

 下面代码演示了老师给同学发本子的过程,这里的链中对象都属于同一类Student的不同实例,对于链中的对象是不同类型的情况,可以参考GOF《

设计模式》中的代码或考虑上面雇佣技工系统的实现。

本部分代码示例包括三个Book、Student、和Client.

代码清单如下:

类Book,本子类,包括本子的主人名字属性


package qinysong.pattern.chainOfResponsibility;
public class Book {
  private String studentName;
  public Book(String studentName){
    this.studentName = studentName;
  }
  public String getStudentName(){
    return studentName;
  }
}



类Student,学生类,包括姓名和下一个同学属性


package qinysong.pattern.chainOfResponsibility;
public class Student {
  private String name;
  private Student nextStudent;
  public Student(String name, Student nextStudent){
    this.name = name;
    this.nextStudent = nextStudent;
  }
  public void acceptBook(Book book){
    if (book.getStudentName().equals(name)){
      System.out.println("Student(" + name + ").acceptBook 这是我的本子,我收下了,呵呵!");
    } else {
      if (nextStudent != null) {
        System.out.println("Student(" + name + ").acceptBook 这不是我的本子,我传给下一个同学");
        nextStudent.acceptBook(book);
      } else {
        System.out.println("Student(" + name + ").acceptBook 这不是我的本子,而且我是最后一个同学了,所以本子没人要了!");
      }
    }
  }
}



类Client,测试类,包括维护学生链,和向学生链传递本子两部分


package qinysong.pattern.chainOfResponsibility;
//扮演两个角色:1)上下文环境的管理者,构建同学链、2)老师,把本子传给同学链
public class Client {
  public static void main(String[] args){
    System.out.println("Client.main begin ......");
    //构造同学链
    Student zhangsan = new Student("zhangsan", null);
    Student lisi = new Student("lisi", zhangsan);
    Student wangwu = new Student("wangwu", lisi);
    //模拟老师,把李四的本子发出去
    wangwu.acceptBook(new Book("lisi"));
    //模拟老师,发一个别的班的同学的本子
    wangwu.acceptBook(new Book("xxx"));
    System.out.println("Client.main end   ......");
  }
}



    您可能感兴趣的文章:

  • 本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载,整理或搜集自网络.欢迎任何形式的转载,转载请注明出处.
    转载请注明:文章转载自:[169IT-IT技术资讯]
    本文标题:GOF设计模式简介- 责任链模式
相关文章推荐:


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3