Java 责任链模式 Builder

责任链:

责任链的含义为一组处理相关事务的执行链,该链上存在者许多节点,每个节点都会映射到具体请求事务上。如果处理完一个节点后那么该节点将持有整个对象的引用传递到下一个节点上直至处理完毕。

使用责任链的优点是简化了对象对外暴露的细节,使其内部更加隐蔽;增强了对象指派职责的灵活性,允许动态地增加或减少责任链。但它的缺点也是显而易见的,就是请求不一定能够被接受,因此节点必须要做好这些条件下的处理。

通常在网络请求里面最容易见到使用责任链模式的框架,如OkHttp、Alamofire等。下面就Android中的OkHttp我们模拟出一个网络请求的示例。

代码:

public class OakHttp {
	
	public final String url;
	public final String header;
	public final String language;

	public OakHttp(){
		this(new Builder());
	}
	
	
	public OakHttp(Builder builder){
		this.url = builder.url;
		this.header = builder.header;
		this.language = builder.language;
	}
	
	public String getURL() {
		return url;
	}
	
	public String getHeader(){
		return header;
	}
	
	public String getLanguage(){
		return language;
	}
	
	public Builder newBuilder(){
		return new Builder(this);
	}
	
	@Override
	public String toString(){
		return "OakHttp{" +
	"url=" + url + ",header=" + header + ",language=" + language + "}";
	}
	
	public static class Builder{
		public String url;
		public String header;
		public String language;
		
		public Builder(){
			url = url;
			header = header;
			language = language;
		}
		
		Builder(OakHttp oakHttp){
			this.url = url;
			this.header = header;
			this.language = language;
		}
		
		public Builder setURL(String url){
			this.url = url;
			return this;
		}
		
		public Builder setHeader(String header){
			this.header = header;
			return this;
		}
		
		public Builder setLanguage(String language){
			this.language = language;
			return this;
		}
		
		public OakHttp build(){
			return new OakHttp(this);
		}
	}
	
}

使用:

		OakHttp oakHttp = new OakHttp.Builder()
				.setURL("https://www.baidu.com")
				.setHeader("FireFox")
				.setLanguage("Chiness")
				.build();
		System.out.println(oakHttp.toString());
<think>好的,我需要帮助用户找到Java责任链模式的示例代码。根据用户提供的引用内容,有几个相关的资源提到了责任链模式的实现和应用。首先,引用[1]、[2]、[3]和[4]都讨论了责任链模式的基本概念和适用场景,尤其是引用[3]提到了Spring Security中的过滤器链作为例子,而引用[5]提到了多用户环境下的审核流程应用。 用户需要的是具体的示例代码。根据引用[1]和[2],责任链模式通常涉及处理器的抽象类或接口,以及具体的处理器实现类,每个处理器持有下一个处理器的引用。可能的步骤包括: 1. 定义一个处理器接口,包含处理请求的方法和设置下一个处理器的方法。 2. 创建具体处理器类,每个类实现处理逻辑,并决定是否将请求传递给下一个处理器。 3. 客户端代码构建责任链,并将请求发送给链的第一个处理器。 需要确保代码符合Java标准,并且能够展示责任链的动态传递特性。例如,审核流程的例子中,每个审核环节作为处理器,依次处理请求,直到某个环节处理完毕或到达链的末端。 还要注意引用提到的性能问题(引用[4]),避免过长的责任链影响性能,并确保每个请求都被处理。因此示例应简洁,展示基本结构即可。 接下来,结合这些信息,构建一个审核流程的示例代码,包括抽象处理器、具体处理器(如部门经理、人事总监、总经理),以及客户端如何组装链条并触发处理。同时,需要解释各个部分的作用,符合用户要求的清晰结构。 需要验证代码是否正确,比如每个处理器是否设置下一个处理器,处理逻辑是否正确传递请求。此外,确保使用中文注释和解释,符合用户的语言要求。 最后,生成相关问题,可能涉及责任链模式的优缺点、实际应用场景、与其它模式的区别等,参考用户提供的示例问题结构。</think>### Java责任链模式示例代码及讲解 责任链模式的核心思想是将多个处理器对象连接成链,请求沿着链传递直到被处理。以下是基于审核流程的完整示例: #### 1. 定义请求对象 ```java public class Request { private String content; // 请求内容 private boolean approved; // 审批状态 // 构造函数、getter/setter省略 } ``` #### 2. 创建处理器接口 ```java public interface Approver { void setNextApprover(Approver nextApprover); void processRequest(Request request); } ``` #### 3. 实现具体处理器 ```java // 部门经理审批 public class DepartmentManager implements Approver { private Approver next; @Override public void setNextApprover(Approver next) { this.next = next; } @Override public void processRequest(Request request) { if (!request.isApproved()) { System.out.println("部门经理审批中..."); if (request.getContent().contains("常规")) { request.setApproved(true); } else if (next != null) { next.processRequest(request); } } } } // 人事总监审批 public class HRDirector implements Approver { private Approver next; // 类似实现... // 判断是否包含"人事调整"关键词 } // 总经理审批 public class GeneralManager implements Approver { // 终审处理器,无需设置next @Override public void processRequest(Request request) { System.out.println("总经理终审..."); request.setApproved(true); } } ``` #### 4. 组装责任链 ```java public class ChainBuilder { public static Approver buildChain() { Approver dm = new DepartmentManager(); Approver hr = new HRDirector(); Approver gm = new GeneralManager(); dm.setNextApprover(hr); hr.setNextApprover(gm); return dm; } } ``` #### 5. 客户端调用 ```java public class Client { public static void main(String[] args) { Request request = new Request("人事调整申请"); Approver chain = ChainBuilder.buildChain(); chain.processRequest(request); System.out.println("审批结果:" + request.isApproved()); } } ``` #### 模式特点: 1. **解耦请求与处理**:客户端只需触发第一个处理器 2. **动态扩展**:新增审批环节只需添加新处理器类 3. **灵活组合**:可通过改变链结构实现不同审批流程 [^1][^2][^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值