责任链模式——java技术栈系列文章

IT黑名单 2017-5-15 17:16:55

目录

什么是责任链模式

客户端请求一条链上传递(该链由包含下家引用的多个对象节点组成,每个节点都有机会处理请求),直到链上某个对象决定处理该请求(或者无对象处理——不严格的责任链)。
哪个对象处理该请求运行时刻确定,链的各节点可灵活拆分再重组,避免了请求的发送者和接受者的紧耦合。
常见的责任链模式应用场景:Filter、校验器链等。

实际使用中并不会绝对符合责任链的定义,主要是利用它的思想。以下用责任链的思想写了个简单的校验器
校验器链Validators.java

package com.blacklist.demo;

import java.util.ArrayList;
import java.util.List;

public class Validators {
	private List<Validator> list;

	public void add(Validator validator) {
		if (null == list) {
			list = new ArrayList<Validator>();
		}
		list.add(validator);
	}

	public void doValidator() {
		list.stream().anyMatch(v -> v.validator());
	}
}
校验器节点抽象Validator.java
package com.blacklist.demo;

public abstract class Validator {
	protected String name;
	public Validator setName(String name) {
		this.name = name;
		return this;
	}
	public abstract boolean validator();
}

客户端(为节省篇幅将两个具体的节点实现也写在了这里,实际中客户端不会感知具体节点)Main.java

package com.blacklist.demo;

public class Main {
	public static void main(String[] args) {
		Validators vs = new Validators();
		vs.add(new Validator1().setName("Validator1"));
		vs.add(new Validator2().setName("Validator2"));
		vs.doValidator();
	}
}

class Validator1 extends Validator {
	@Override
	public boolean validator() {
		System.out.println("do Validator1");
		return "Validator1".equals(name);
	}
}

class Validator2 extends Validator {
	@Override
	public boolean validator() {
		System.out.println("do Validator2");
		return "Validator2".equals(name);
	}
}

执行结果:


转载请注明来源【IT黑名单

本文链接:http://blog.itblacklist.cn/20170515/8452.html

© Copyright 2016 IT黑名单 Inc.All Rights Reserved. 豫ICP备15018592号-2