当一个对象需要经过一系列的操作或者检验的时候,这个时候职责链设计模式就很奏效了。
比如对一个请求进行一系列的处理的时候,职责链就很好用
package chain;
public class Chain {
private Handler head = null;
private Handler tail = null;
public void addHandler(Handler handler){
if (head == null){
head = handler;
tail = handler;
return;
}
tail.next = handler;
tail = handler;
}
public boolean handler(String message){
if (head != null){
head.handle(message);
}
return false;
}
public static void main(String[] args) {
Chain chain = new Chain();
chain.addHandler(new Handler1());
chain.addHandler(new Handler2());
chain.handler("555");
}
}
class Handler1 extends Handler{
@Override
boolean doHandle(String message) {
System.out.println("this is handler1, "+message);
if(!message.equals("666")){
return false;
}
return true;
}
}
class Handler2 extends Handler{
@Override
boolean doHandle(String message) {
System.out.println("this is handler2, "+message);
return true;
}
}
abstract class Handler{
Handler next = null;
public boolean handle(String message){
boolean flag = doHandle(message);
if(flag && next != null){
return next.handle(message);
}
return true;
}
abstract boolean doHandle(String message);
}
当需要新的处理流程的时候,直接继承对应Handler,然后将对应的实例加入到chain中就可以了。
handler还可以自定义业务,如果请求不满足条件,就把请求给抛弃,不传递给下面的handler。
职责链模式数组版本
package chain;
import java.util.ArrayList;
import java.util.List;
public class Chain2 {
List<MyHandler> list = new ArrayList<MyHandler>();
public void addHandler(MyHandler handler){
list.add(handler);
}
public void hanlder(String message){
for (MyHandler handler:list){
boolean flag = handler.handler(message);
if (!flag){
return;
}
}
}
public static void main(String[] args) {
Chain2 chain2 = new Chain2();
chain2.addHandler(new MyHandler1());
chain2.addHandler(new MyHandler2());
chain2.hanlder("555");
}
}
class MyHandler1 implements MyHandler{
@Override
public boolean handler(String message) {
System.out.println("this is handler1, "+message);
if(!message.equals("666")){
return false;
}
return true;
}
}
class MyHandler2 implements MyHandler{
@Override
public boolean handler(String message) {
System.out.println("this is handler2, "+message);
return true;
}
}
interface MyHandler{
boolean handler(String message);
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/qq_40276626/article/details/121386524
内容来源于网络,如有侵权,请联系作者删除!