责任链模式案例


前言

二十三种设计模式之责任链模式。马士兵老师留下的责任链模式仿着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;
    }
}

总结

人生物语:这个世界已经太吵闹,我们一定要给自己一个平常心境。平静地面对生活中所发生的一切。宠辱不惊,看庭前花开花落;去留无意,望天上云卷云舒。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉忆-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值