类图

/**
* 抽象责任
* @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怎样实现职责分明的责任链(Chain of Responsibility)模式的详解的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号