java中的责任链模式
2016-08-09 16:48
141 查看
1.责任链模式简介:
责任链模式设计的角色:1.1抽象处理者角色:
1.2具体处理者角色
2.使用责任链模式模仿出差申请费的报销流程:
分心如下:涉及到的对象:
以面向对象的思维应该讲责任链抽象为一个对象(HandlerChain)
HandlerChain:过滤器的抽象
ApplicationHandlerChain的具体实现
Request:封装的请求信息
Handler:抽象处理者
ProjectManagerHandler项目经理处理
SectionManagerHandler部门经理处理
GeneralManager总经理处理:
3.代码实现:
HandlerChain
package com.xinghengedu.chain;
/**
* 奖责任链抽象为一个借口
* @author issuser
*
*/
public interface HandlerChain{
/**
* 责任链中传递
*/
public HandlerChain doChain(Request request);
}
Request::
package com.xinghengedu.chain; import java.util.Date; /** * 封装申请的参数 * * @author issuser * */ public class Request { /** * 申请的名称 */ private String applyName; /** * 申请的额度 */ private Double amount; /** * 提交申请的时间 * */ private Date createDate; /** * 神审批的时间 */ private Date handlerDate; public String getApplyName() { return applyName; } public void setApplyName(String applyName) { this.applyName = applyName; } public Double getAmount() { return amount; } public void setAmount(Double amount) { this.amount = amount; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public Date getHandlerDate() { return handlerDate; } public void setHandlerDate(Date handlerDate) { this.handlerDate = handlerDate; } }
ApplicationHandlerChain:
package com.xinghengedu.chain;
import java.util.ArrayList;
import java.util.List;
public class ApplicationHandlerChainimplements HandlerChain{
private List<Handler> handlerList=new ArrayList<Handler>();
public ApplicationHandlerChain(List<Handler> handlerList) {
this.handlerList=handlerList;
}
int i=0;
@Override
public HandlerChaindoChain(Request request) {
if(this.i<handlerList.size()){
this.getHandler().doHandler(this, request);
}else{
System.out.println("未找到合适的处理方式");
}
return null;
}
public void addHandler(Handler handler){
this.handlerList.add(handler);
}
private Handler getHandler(){
return this.handlerList.get(i);
}
}
Handler:
package com.xinghengedu.chain;
/**
* 抽象处理者
*
* @author issuser
*
*/
public interface Handler {
/**
* 处理
*
* @param handlerChain
*/
public void doHandler(HandlerChainhandlerChain,Request request);
/**
* 向后传递
*/
public void doNext(HandlerChainhandlerChain,Request request);
}
ProjectManagerHandler:
package com.xinghengedu.chain;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 具体处理者角色:项目经理处理(如果申请的额度<=1000,项目经理可以处理)
*
* @author issuser
*
*/
public class ProjectManagerHandler implements Handler {
@Override
public void doHandler(HandlerChainhandlerChain, Request request) {
double amount=request.getAmount();
String name=request.getApplyName();
System.out.println("申请的额度为"+amount);
System.out.println("申请人的姓名为"+name);
if(amount<=1000){
System.out.println("项目经理审批");
System.out.println("项目经理审批的时间为:"+new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()));
}else{
this.doNext(handlerChain, request);
}
}
@Override
public void doNext(HandlerChainhandlerChain, Request request) {
ApplicationHandlerChainapplicationHandlerChain= (ApplicationHandlerChain)handlerChain;
applicationHandlerChain.i++;
handlerChain.doChain(request);
}
}
SectionManagerHandler:
package com.xinghengedu.chain;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 具体处理者:部门经理
* @author issuser
*
*/
public class SectionManagerHandler implements Handler {
@Override
public void doHandler(HandlerChainhandlerChain ,Request request) {
double amount=request.getAmount();
String name=request.getApplyName();
System.out.println("申请的额度为"+amount);
System.out.println("申请人的姓名为"+name);
if(amount>1000&&amount<=3000){
System.out.println("部门经理审批");
System.out.println("部门经理审批的时间为:"+new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()));
}else{
this.doNext(handlerChain, request);
}
}
@Override
public void doNext(HandlerChainhandlerChain,Request request) {
ApplicationHandlerChainapplicationHandlerChain= (ApplicationHandlerChain)handlerChain;
applicationHandlerChain.i++;
handlerChain.doChain(request);
}
}
GeneralManager:
package com.xinghengedu.chain;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 具体产品角色:总经理
* @author issuser
*
*/
public class GeneralManager implements Handler{
@Override
public void doHandler(HandlerChainhandlerChain, Request request) {
double amount=request.getAmount();
String name=request.getApplyName();
System.out.println("申请的额度为"+amount);
System.out.println("申请人的姓名为"+name);
if(amount>3000){
System.out.println("总经理审批");
System.out.println("总经理审批的时间为:"+new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()));
}else{
this.doNext(handlerChain, request);
}
}
@Override
public void doNext(HandlerChainhandlerChain, Request request) {
ApplicationHandlerChainapplicationHandlerChain= (ApplicationHandlerChain)handlerChain;
applicationHandlerChain.i++;
handlerChain.doChain(request);
}
}
client:
package com.xinghengedu.chain; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * 责任链模式: * 1.抽象处理者 * 2.具体处理者 * 3.客户端 * @author issuser * */ public class client { public static void main(String[] args) { List<Handler> list=new ArrayList<Handler>(); list.add(new ProjectManagerHandler()); list.add(new SectionManagerHandler()); list.add(new GeneralManager()); Request request=new Request(); request.setAmount(3001.00); request.setApplyName("柯凡"); request.setCreateDate(new Date()); new ApplicationHandlerChain(list).doChain(request); } }
4.运行效果如下:
相关文章推荐
- JAVA啊设计模式之责任链模式
- java与模式 责任链模式 Chain of Responsibility pattern
- java设计模式17——责任链模式(Chain of Responsibility)
- Java设计模式透析之 ——责任链模式(Responsibility)
- 浅谈JAVA设计模式之——责任链模式(COR)
- JAVA设计模式之责任链模式详解
- Java设计模式(九)责任链模式 命令模式
- java设计模式之责任链模式
- Java设计模式之责任链模式(Chain of Responsibility模式)介绍
- 深入浅出基于Java的责任链模式
- java 设计模式-行为模式之责任链模式
- Java开发中的23种设计模式之十七:责任链模式(Chain of Responsibility)
- 责任链模式(JAVA设计模式)
- 【责任链模式】Java版简单实例与Tomcat实例
- JAVA中责任链模式
- java 设计模式之六-责任链模式
- 设计模式(十三)----- 责任链模式(Chain of Responsibility)----(JAVA版)
- Java设计模式之责任链模式简介
- java-设计模式(行为型)-【责任链模式】
- JAVA设计模式(13):行为型-责任链模式(Responsibility)