每天一设计模式之 职责链模式
2009-05-30 15:07
162 查看
每天一设计模式之 职责链模式
职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止.
职责链模式结构图:
样例代码来源:大话设计模式
小菜加薪的故事
管理者:
package com.test; public abstract class Manager { protected String name;
// 管理者的上级
protected Manager superior; public Manager(String name) {
this.name = name;
} // 设置上级
public void setSuperior(Manager superior) {
this.superior = superior;
} // 申请请求
public abstract void requestApplication(Request request);
} 经理:
package com.test; public class CommonManager extends Manager { public CommonManager(String name) {
super(name);
// TODO Auto-generated constructor stub
} @Override
public void requestApplication(Request request) {
if (request.getRequestType().equals("请假") && request.getNumber() <= 2) {
System.out.println(name + request.getRequestContent() + ",数量"
+ request.getNumber() + "被批准");
} else {
if (superior != null) {
superior.requestApplication(request);
}
} } } 总监:
package com.test; public class Majordomo extends Manager { public Majordomo(String name) {
super(name);
// TODO Auto-generated constructor stub
} @Override
public void requestApplication(Request request) {
if (request.getRequestType().equals("请假") && request.getNumber() <= 5) {
System.out.println(name + request.getRequestContent() + ",数量"
+ request.getNumber() + "被批准");
} else {
if (superior != null) {
superior.requestApplication(request);
}
} } } 总经理:
package com.test; public class GeneralManager extends Manager { public GeneralManager(String name) {
super(name);
// TODO Auto-generated constructor stub
} @Override
public void requestApplication(Request request) {
if (request.getRequestType().equals("请假")) {
System.out.println(name + request.getRequestContent() + ",数量"
+ request.getNumber() + "被批准");
} else if (request.getRequestType().equals("加薪")
&& request.getNumber() <= 500) {
System.out.println(name + request.getRequestContent() + ",数量"
+ request.getNumber() + "被批准"); } } } 测试代码:
package com.test; public class Test { /**
* @param args
*/
public static void main(String[] args) {
CommonManager jinli = new CommonManager("经理");
Majordomo zongjian = new Majordomo("总监");
GeneralManager zongjingli = new GeneralManager("总经理"); jinli.setSuperior(zongjian);
zongjian.setSuperior(zongjingli); Request request = new Request();
request.setRequestType("请假");
request.setRequestContent("小菜请假");
request.setNumber(1);
jinli.requestApplication(request); Request request2 = new Request();
request.setRequestType("请假");
request.setRequestContent("小菜请假");
request.setNumber(4);
jinli.requestApplication(request); Request request3 = new Request();
request.setRequestType("加薪");
request.setRequestContent("小菜请求加薪");
request.setNumber(400);
jinli.requestApplication(request); } }
职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止.
职责链模式结构图:
样例代码来源:大话设计模式
小菜加薪的故事
管理者:
package com.test; public abstract class Manager { protected String name;
// 管理者的上级
protected Manager superior; public Manager(String name) {
this.name = name;
} // 设置上级
public void setSuperior(Manager superior) {
this.superior = superior;
} // 申请请求
public abstract void requestApplication(Request request);
} 经理:
package com.test; public class CommonManager extends Manager { public CommonManager(String name) {
super(name);
// TODO Auto-generated constructor stub
} @Override
public void requestApplication(Request request) {
if (request.getRequestType().equals("请假") && request.getNumber() <= 2) {
System.out.println(name + request.getRequestContent() + ",数量"
+ request.getNumber() + "被批准");
} else {
if (superior != null) {
superior.requestApplication(request);
}
} } } 总监:
package com.test; public class Majordomo extends Manager { public Majordomo(String name) {
super(name);
// TODO Auto-generated constructor stub
} @Override
public void requestApplication(Request request) {
if (request.getRequestType().equals("请假") && request.getNumber() <= 5) {
System.out.println(name + request.getRequestContent() + ",数量"
+ request.getNumber() + "被批准");
} else {
if (superior != null) {
superior.requestApplication(request);
}
} } } 总经理:
package com.test; public class GeneralManager extends Manager { public GeneralManager(String name) {
super(name);
// TODO Auto-generated constructor stub
} @Override
public void requestApplication(Request request) {
if (request.getRequestType().equals("请假")) {
System.out.println(name + request.getRequestContent() + ",数量"
+ request.getNumber() + "被批准");
} else if (request.getRequestType().equals("加薪")
&& request.getNumber() <= 500) {
System.out.println(name + request.getRequestContent() + ",数量"
+ request.getNumber() + "被批准"); } } } 测试代码:
package com.test; public class Test { /**
* @param args
*/
public static void main(String[] args) {
CommonManager jinli = new CommonManager("经理");
Majordomo zongjian = new Majordomo("总监");
GeneralManager zongjingli = new GeneralManager("总经理"); jinli.setSuperior(zongjian);
zongjian.setSuperior(zongjingli); Request request = new Request();
request.setRequestType("请假");
request.setRequestContent("小菜请假");
request.setNumber(1);
jinli.requestApplication(request); Request request2 = new Request();
request.setRequestType("请假");
request.setRequestContent("小菜请假");
request.setNumber(4);
jinli.requestApplication(request); Request request3 = new Request();
request.setRequestType("加薪");
request.setRequestContent("小菜请求加薪");
request.setNumber(400);
jinli.requestApplication(request); } }
相关文章推荐
- 每天一整理-java设计模式之builder模式
- java设计模式之修饰、职责链
- 设计模式--职责链模式
- 设计模式---职责琏模式
- 每天学一点设计模式-工厂方法模式
- 设计模式六大原则(1):单一职责原则
- 设计模式之职责链模式
- 设计模式六大原则(1):单一职责原则
- 设计模式六大原则之----单一职责原则
- 深入理解JavaScript系列(38):设计模式之职责链模式
- 设计模式六大原则:单一职责
- 设计模式六大原则(1):单一职责原则
- 设计模式六大原则(1):单一职责原则
- 每天学一点设计模式-适配器模式
- 设计模式学习二:单一职责
- 设计模式六大原则(1):单一职责原则
- 设计模式六大原则:单一职责原则 + 依赖倒置原则
- 设计模式C++实现--职责链模式
- 与状态模式相似的设计模式---职责链模式
- 设计模式 - 职责链模式