`

责任链模式

 
阅读更多

1.类比例子:

员工向公司申请举办活动补贴,项目经理,部门经理,总经理都有不同的审批权限。那么员工申请提交给谁来处理?

随机提交弊端:1.如果提交给项目经理,项目经理审批权限没有那么大,那么最终不了了之了

                             2.内部处理流程会非常混乱

 

可以使用责任链模式来实现上述功能:某人提出申请,请求经过审批流程 项目经理—〉部门经理—〉总经理 这样一条领导处理链上进行传递,发出请求的人并不知道谁会来处理他的请求,每个领导会根据自己的职责范围,来判断是处理请求还是把请求交给更高级别的领导,只要有领导处理了,传递就结束了。

 

优点:1.申请一定会被最大限度的处理

           2.在合适的地方被合适的审批,提高效率

           3.责任链的拓扑结构多样性,可以有序,可以无序

 

 

2.实际案例的代码:

 

 目录结构如图

 

类说明:

Approver:抽象类,表示处理的人

Level1继承Approver,表示项目经理,审批权限是0-2000元

Level2继承Approver,表示部门经理,审批权限是2000-5000元

Level3继承Approver,表示总经理,审批权限是5000以上

MainTest是测试类

PurchaseRequest是申请对象

注意,这里我设置了环形责任链

 

 

 2.1  Approver.java

 

package 责任链;

public abstract class Approver {
	 

	Approver successor;
	 String Name;
	
	 
	//构造函数
	public Approver(String Name)
	{
		this.Name=Name;
	}
	
	
	//处理申请
	public abstract void ProcessRequest( PurchaseRequest request);
	
	//设置下一个处理者
	public void SetSuccessor(Approver successor)   
	{
		this.successor=successor;
	}
}

 

2.2   Level1.java

package 责任链;

public class Level1 extends Approver {

	public Level1(String Name) {
		super(Name);
	}

	public void ProcessRequest(PurchaseRequest request) {
		
		//如果满足权限,就处理(这里处理后输出金额)
		if(Integer.parseInt(request.getPrice())<2000)
		{
			System.out.println("金额是"+request.getPrice()+"    "+this.getClass().getName()+"已结处理");
		}
		
		//如果不满足权限,就传递给下一个处理者
		else
		{
			super.successor.ProcessRequest(request);
		}
			
	}

}

 

2.3  Level2.java
 
package 责任链;

public class Level2 extends Approver {

	public Level2(String Name) {
		super(Name);
	}

	public void ProcessRequest(PurchaseRequest request) {
		
		
		//如果满足权限,就处理(这里处理后输出金额)
		if(2000<=Integer.parseInt(request.getPrice())&&Integer.parseInt(request.getPrice())<5000)
		{
			System.out.println("金额是"+request.getPrice()+"    "+this.getClass().getName()+"已结处理");
		}
		
		//如果不满足权限,就传递给下一个处理者
		else
		{
			super.successor.ProcessRequest(request);
		}
			
	}

}
 
2.4  Level3.java
package 责任链;

public class Level3 extends Approver {

	public Level3(String Name) {
		super(Name);
	}

	public void ProcessRequest(PurchaseRequest request) {
		
		
		//如果满足权限,就处理(这里处理后输出金额)
		if(5000<=Integer.parseInt(request.getPrice()))
		{
			System.out.println("金额是"+request.getPrice()+"    "+this.getClass().getName()+"已结处理");		}
		
		
		//如果不满足权限,就传递给下一个处理者
		else
		{
			super.successor.ProcessRequest(request);
		}
			
	}

}
 
2.5 MainTest.java
package 责任链;

public class MainTest {

	
	public static void  main(String [] args){
    
		
		
	//创建处理者对象
	Approver a1=new Level1("A1");
	Approver b1=new Level3("A2");
	Approver c1=new Level2("A3");
    
	//环形责任链,设置下一个责任链的处理者
	a1.SetSuccessor(b1);
	b1.SetSuccessor(c1);
	c1.SetSuccessor(a1);

	//创建申请金额对象    PurchaseRequest("数量","单价","总价")
	PurchaseRequest price1=new PurchaseRequest("5","200","1000");
	PurchaseRequest price2=new PurchaseRequest("1","2","2");
	PurchaseRequest price3=new PurchaseRequest("5","400","2000");
	PurchaseRequest price4=new PurchaseRequest("1","4999","4999");
	PurchaseRequest price5=new PurchaseRequest("1","2001","2001");
	PurchaseRequest price6=new PurchaseRequest("1","20011","20011");
	
	
	//处理申请
	a1.ProcessRequest(price1);
	a1.ProcessRequest(price2);
	a1.ProcessRequest(price3);
	a1.ProcessRequest(price4);
	a1.ProcessRequest(price5);
	a1.ProcessRequest(price6);
	
   System.out.println("       ");
	
	b1.ProcessRequest(price1);
	b1.ProcessRequest(price2);
	b1.ProcessRequest(price3);
	b1.ProcessRequest(price4);
	b1.ProcessRequest(price5);
	b1.ProcessRequest(price6);
	
	 System.out.println("       ");
	
	c1.ProcessRequest(price1);
	c1.ProcessRequest(price2);
	c1.ProcessRequest(price3);
	c1.ProcessRequest(price4);
	c1.ProcessRequest(price5);
	c1.ProcessRequest(price6);
	
	
	}
}
 
2.6  PurchaseRequest.java
package 责任链;

public class PurchaseRequest {

	
	String number;
	String singlePrice;
	String price;
	
	public PurchaseRequest(String number,String singlePrice,String price)
	{
		this.number=number;
		this.singlePrice=singlePrice;
		this.price=price;
	}

	public String getNumber() {
		return number;
	}

	public void setNumber(String number) {
		this.number = number;
	}

	public String getSinglePrice() {
		return singlePrice;
	}

	public void setSinglePrice(String singlePrice) {
		this.singlePrice = singlePrice;
	}

	public String getPrice() {
		return price;
	}

	public void setPrice(String price) {
		this.price = price;
	}
	
	
}
 
3.代码测试结果
 

 
因为是环形链,所以申请不论给谁都会被执行,执行结果不会存在差异
  • 大小: 7 KB
  • 大小: 16.4 KB
分享到:
评论

相关推荐

    spring责任链模式详解

    责任链模式是软件设计模式中的一种行为模式,它允许将请求沿着处理者对象的链进行传递,直到某个对象处理该请求。在Spring框架中,责任链模式被广泛应用于AOP(面向切面编程)和事件处理等场景。下面将详细阐述责任...

    设计模式之责任链模式源码

    责任链模式是设计模式中的一种行为模式,它允许在对象之间建立一条处理请求的链条,每个对象都包含对请求的处理逻辑,以及将请求传递给下一个对象的能力。这种模式使得请求可以在链上的对象之间传递,直到被某个对象...

    设计模式之职责链模式(ChainOfResponsibilityPattern)

    职责链模式(ChainOfResponsibilityPattern)是一种行为设计模式,主要目的是通过建立一个处理请求的对象链,使得请求可以在链上的各个对象间传递,直到被某个对象处理。这种模式可以有效地解耦请求发起者和处理者,...

    责任链模式代码

    责任链模式是一种设计模式,它允许我们把请求沿着处理者对象的链进行传递,直到某个对象处理这个请求。这种模式让请求的发送者和接收者解耦,因为发送者无需知道哪个对象会处理请求,而接收者也无需知道请求来自哪里...

    设计模式 - 职责链模式(C++实例)

    职责链模式(Chain of Responsibility)是一种行为设计模式,它的核心思想是将一系列处理请求的对象组织成一条链,每个对象都包含对请求的处理或传递的责任。在C++中实现职责链模式,我们可以创建一个抽象处理器类,...

    责任链模式Demo

    责任链模式是一种设计模式,它允许我们通过定义一系列处理请求的对象来形成一条链,每个对象都包含对请求的处理逻辑,以及将请求传递给链中下一个对象的能力。这种模式使得我们可以将请求的发送者和接收者解耦,使得...

    设计模式-责任链模式

    责任链模式是一种行为设计模式,它允许我们把请求沿着处理者对象的链式结构进行传递,直到某个对象处理这个请求。这种模式使得我们能够将请求的发送者与接收者解耦,同时也允许在运行时动态地改变处理顺序或添加新的...

    JAVA设计模式之行为模式 责任链模式和状态模式

    本篇将探讨两种重要的行为设计模式:责任链模式(Chain of Responsibility Pattern)和状态模式(State Pattern)。 **责任链模式**是一种使多个对象都有机会处理请求的模式,避免请求发送者与接收者之间的耦合。在...

    职责链模式模型代码

    职责链模式(Chain of Responsibility)是一种行为设计模式,它允许我们沿着对象链传递请求,让每个对象决定是否处理这个请求,或者将请求传递给链中的下一个对象。在C#中,我们可以利用类和接口来实现这种模式。让...

    设计模式之责任链模式(Chain)

    责任链模式是一种行为设计模式,它的核心思想是将请求的发送者和接收者解耦,通过将多个处理对象串联成一个处理链,使得请求沿着这个链进行传递,直到被某个对象处理。这种模式使得系统更加灵活,可以在运行时动态...

    责任链模式例子

    责任链模式是一种设计模式,它允许我们通过定义一系列处理请求的对象来解耦发送者和接收者。在责任链模式中,每个对象都是链上的一个节点,可以处理请求的一部分或者将请求传递给链上的下一个对象。这种模式使得系统...

    第17章_职责链模式.ppt

    【职责链模式】是行为型模式的一种,其主要动机是解耦请求的发送者和处理者。在职责链中,多个对象可以接收并处理同一个请求,这些对象形成一条链,请求沿着链传递,直到某个对象负责处理。这种方式减少了对象间的...

    责任链模式小demo

    责任链模式是一种设计模式,它允许我们通过定义一系列处理对象(过滤器)形成一个链,这些对象依次处理请求,而发送者无需知道哪个对象具体处理请求。这种模式将请求的发送者与接收者解耦,增加了系统的灵活性和可...

    【设计模式】之责任链模式1

    责任链模式是一种行为设计模式,它允许将请求沿着处理者对象的链进行发送,而接收者可以在链中的任何位置处理该请求。这种模式的核心思想是将处理请求的对象组织成一个链条,每个对象(节点)都包含对下个处理者的...

    责任链模式学习

    责任链模式是一种行为设计模式,它允许我们定义一系列处理请求的对象,这些对象形成一个链,请求沿着这个链传递,直到某个对象能够处理它。这种方式使得我们可以将请求的发送者和接收者解耦,同时增加了系统扩展的...

    设计模式之责任链模式程序

    一、责任链模式 现有 “战士”、“班长”、“排长”、“连长”,“营长”五种角色,当有人要请假时要进行以下处理 1.只能是下级象上级请假(如“排长”只能向“连长请假”) 2.班长可以批准1天内的假期,排长批5天,...

    设计模式之责任链模式Java实现

    责任链模式(Chain of Responsibility)是一种行为设计模式,它允许将请求沿着处理者对象的链进行传递,直到某个对象能够处理这个请求为止。在Java中,我们可以通过接口和类的组合来实现这种模式。让我们深入探讨...

    设计模式的责任链模式的例子

    责任链模式(Chain of Responsibility Pattern)是设计模式中的一种行为模式,它的主要目的是将请求的发送者和接收者解耦,使得多个对象有机会处理这个请求,形成一条责任链。在这个链上,请求会沿着链传递,直到有...

    责任链模式 C++ 实现

    责任链模式是一种设计模式,它允许我们通过定义一系列处理对象(每个对象称为一个节点),将请求在这些对象之间传递,直到被某个节点处理或者传递完整个链条。这种模式的主要优点在于解耦了发送者和接收者,使得系统...

Global site tag (gtag.js) - Google Analytics