模式简介UML图GITHUB源码下载示例代码运行结果
模式简介
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 handles it.
UML图
GITHUB源码下载
https://github.com/YEN-GitHub/PatternDemo/tree/master/src/BehavioralPattern1/ChainofResponsibilityPattern 可以start一下,之后最新的都能及时看到.
示例代码
package BehavioralPattern1.ChainofResponsibilityPattern.demo1;
/**
* Created by yangenneng on 2017-06-07 10:30
* Abstract:抽象处理者类
*/
public abstract class Handler {
private String name;
private Handler successor =
null;
public void handleRequest(
double objectPrice, String objectName) {
}
public String
getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Handler
getSuccessor() {
return successor;
}
public void setSuccessor(Handler successor) {
this.successor = successor;
}
}
package BehavioralPattern1.ChainofResponsibilityPattern.demo1;
/**
* Created by yangenneng on 2017-06-07 10:34
* Abstract:部门经理
*/
public class DepartmentManager extends Handler {
public DepartmentManager(String name){
this.setName(name);
}
@Override
public void handleRequest(
double objectPrice, String objectName) {
if(objectPrice>
10000){
this.getSuccessor().handleRequest(objectPrice, objectName);
}
else {
System.out.println(
"部门经理:"+
this.getName()+
"处理申请,购买:"+objectName);
}
}
}
package BehavioralPattern1.ChainofResponsibilityPattern.demo1;
/**
* Created by yangenneng on 2017-06-07 10:39
* Abstract:部门领导
*/
public class DepartmentLeader extends Handler {
public DepartmentLeader(String name){
this.setName(name);
}
@Override
public void handleRequest(
double objectPrice, String objectName) {
if(objectPrice>
20000){
this.getSuccessor().handleRequest(objectPrice, objectName);
}
else {
System.out.println(
"部门领导:"+
this.getName()+
"处理申请,购买:"+objectName);
}
}
}
package BehavioralPattern1.ChainofResponsibilityPattern.demo1;
/**
* Created by yangenneng on 2017-06-07 10:41
* Abstract:总公司经理
*/
public class CompanyManager extends Handler {
public CompanyManager(String name){
this.setName(name);
}
@Override
public void handleRequest(
double objectPrice, String objectName) {
if(objectPrice>
30000){
this.getSuccessor().handleRequest(objectPrice, objectName);
}
else {
System.out.println(
"总公司经理:"+
this.getName()+
"处理申请,购买:"+objectName);
}
}
}
package BehavioralPattern1.ChainofResponsibilityPattern.demo1;
/**
* Created by yangenneng on 2017-06-07 10:41
* Abstract:总公司领导
*/
public class CompanyLeader extends Handler {
public CompanyLeader(String name){
this.setName(name);
}
@Override
public void handleRequest(
double objectPrice, String objectName) {
if(objectPrice>
40000){
this.getSuccessor().handleRequest(objectPrice, objectName);
}
else {
System.out.println(
"总公司领导:"+
this.getName()+
"处理申请,购买:"+objectName);
}
}
}
package BehavioralPattern1.ChainofResponsibilityPattern.demo1;
/**
* Created by yangenneng on 2017-06-07 10:47
* Abstract:客户端测试
*/
public class Client {
public static void main(String[] args) {
DepartmentManager zhangsan =
new DepartmentManager(
"张三");
DepartmentLeader lisi =
new DepartmentLeader(
"李四");
CompanyManager wangwu =
new CompanyManager(
"王五");
CompanyLeader zhaoliu =
new CompanyLeader(
"赵六");
zhangsan.setSuccessor(lisi);
lisi.setSuccessor(wangwu);
wangwu.setSuccessor(zhaoliu);
zhangsan.handleRequest(
8000,
"材料1");
zhangsan.handleRequest(
18000,
"材料2");
zhangsan.handleRequest(
28000,
"材料3");
zhangsan.handleRequest(
38000,
"材料4");
}
}
运行结果