前言
二十三种设计模式之责任链模式。马士兵老师留下的责任链模式仿着Servlet过滤器。编写一个先获取每个过滤器的request等所有的过滤器执行完了request后,从后往前依次返回response中的数据。
一、案例
package com.hh.userservice.design.chainofresponsibility;
import java.util.LinkedList;
public class ChainOfResponsibility {
public static void main(String[] args) {
ChainFilter chainFilters = new ChainFilter();
chainFilters.add(new MoneyFilter());
chainFilters.add(new BarFilter());
chainFilters.add(new ColorFilter());
chainFilters.doFilter(null,null);
}
}
class ChainFilter {
LinkedList<Filter> listFilter = new LinkedList<>(); // 我是使用了LinekedList存放Filter对象。
public ChainFilter add(Filter filter) {
listFilter.add(filter);
return this;
}
public Filter hasNextFilter() {
if (listFilter.size() > 0) { // 先判断一下集合中是否还有Filter对象
return listFilter.pop(); // 从LinkedList中的pop方法,会将数据依次取出(取出数据后集合中的数据会消失哦)。
}
return null;
}
public boolean doFilter(Request request, Response response) {
Filter filter = hasNextFilter(); // 获取集合中的Filter对象
if (filter != null) { // 判断是否为空。
filter.doFilter(request,response,this); // 将当前的对象ChainFilter 传递下去,这样集合的数据才能和之前的同步
}
return false;
}
}
interface Filter {
boolean doFilter(Request request, Response response, ChainFilter chainFilter);
}
class ColorFilter implements Filter {
@Override
public boolean doFilter(Request request, Response response, ChainFilter chainFilter) {
System.out.println("ColorRequestFilter");
chainFilter.doFilter(request,response); // 这里的每一个执行的过程都拿之前的过滤器链。
System.out.println("ColorResponseFilter");
return false;
}
}
class BarFilter implements Filter {
@Override
public boolean doFilter(Request request, Response response, ChainFilter chainFilter) {
System.out.println("BarRequestFilter");
chainFilter.doFilter(request,response);// 这里的每一个执行的过程都拿之前的过滤器链。
System.out.println("BarResponseFilter");
return false;
}
}
class MoneyFilter implements Filter {
@Override
public boolean doFilter(Request request, Response response, ChainFilter chainFilter) {
System.out.println("MoneyRequestFilter");
chainFilter.doFilter(request,response);// 这里的每一个执行的过程都拿之前的过滤器链。
System.out.println("MoneyResponseFilter");
return false;
}
}
class Request {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Response {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
总结
人生物语:这个世界已经太吵闹,我们一定要给自己一个平常心境。平静地面对生活中所发生的一切。宠辱不惊,看庭前花开花落;去留无意,望天上云卷云舒。