>  기사  >  Java  >  Java가 명확한 책임을 가지고 책임 사슬 모델을 구현하는 방법에 대한 자세한 설명

Java가 명확한 책임을 가지고 책임 사슬 모델을 구현하는 방법에 대한 자세한 설명

黄舟
黄舟원래의
2017-03-11 11:19:281921검색

클래스 다이어그램


/**
 * 抽象责任
 * @author stone
 *
 */
public abstract class IFilter {
	private IFilter successor;

	public IFilter getSuccessor() {
		return successor;
	}

	public void setSuccessor(IFilter successor) {
		this.successor = successor;
	}
	
	public abstract void handleFilter();
	
	public abstract void handleFilter2();
}
/**
 * 具体责任
 * @author stone
 *
 */
public class ConcreteFilter extends IFilter {
	
	private String name;
	public ConcreteFilter(String name) {
		this.name = name;
	}
	
	@Override
	public void handleFilter() {
		/*
		 * 自己先处理,如有后继者,再由它处理一次
		 */
		System.out.println(name + " 处理了请求");
		if (getSuccessor() != null) {
			getSuccessor().handleFilter();
		}
	}
	
	@Override
	public void handleFilter2() {
		/*
		 * 有后继者就后继者处理, 否则自己处理
		 */
		if (getSuccessor() != null) {
			getSuccessor().handleFilter2();
		} else {
			System.out.println(name + " 处理了请求");
		}
	}
}
/*
 * 责任链(Chain of Responsibility)模式		行为型模式
 * 将责任一级一级传递给后继者,直至某一个后继者处理了
 * 行为表现在:责任的传递,需要是一个链一个
 */
public class Test {
	public static void main(String[] args) {
		IFilter filter1 = new ConcreteFilter("permission-filter");//权限过滤
		IFilter filter2 = new ConcreteFilter("suffix-filter");//后缀名过滤
		IFilter filter3 = new ConcreteFilter("style-filter");//风格过滤
		filter1.setSuccessor(filter2);
		filter2.setSuccessor(filter3);
		System.out.println("------以下是每一个处理者(包括后继者)都处理了, 顺序也是一级一级的传递------");
		filter1.handleFilter();
		
		System.out.println("------以下是交由最后一个后继者处理------");
		filter1.handleFilter2();
		
	}
}

인쇄

------以下是每一个处理者(包括后继者)都处理了, 顺序也是一级一级的传递------
permission-filter 处理了请求
suffix-filter 处理了请求
style-filter 处理了请求
------以下是交由最后一个后继者处理------
style-filter 处理了请求

위 내용은 Java가 명확한 책임을 가지고 책임 사슬 모델을 구현하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.