在软件构建构成中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接收者,如果显示指定,将必不可少地带来请求发送者与接收者的紧密耦合。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设计模式简介- 责任链模式