一、目标

增加filterchain功能

二、代码

1.Filter.java

 public interface Filter {
public String doFilter(String str);
}

2.FilterChain.java

 import java.util.ArrayList;
import java.util.List; public class FilterChain implements Filter { private List<Filter> filters = new ArrayList<Filter>(); public String doFilter(String str) {
for(Filter f : filters){
str = f.doFilter(str);
}
return str;
} //把函数的返回值设为FilterChain,返回this,就能方便链式编写代码
public FilterChain addFilter(Filter filter) {
filters.add(filter);
return this;
} }

3.HTMLFilter.java

 public class HTMLFilter implements Filter {

     @Override
public String doFilter(String str) {
return str.replace('<', '[').replace(">", "]");
} }

4.SensitiveFilter.java

 public class SensitiveFilter implements Filter {

     @Override
public String doFilter(String str) {
return str.replace("敏感", "幸福");
} }

5.MsgProcessor.java

 public class MsgProcessor {

     //private List<Filter> filters = new ArrayList<Filter>();
FilterChain filterChain;
private String msg; public FilterChain getFilterChain() {
return filterChain;
} public void setFilterChain(FilterChain filterChain) {
this.filterChain = filterChain;
} public String getMsg() {
return msg;
} public void setMsg(String msg) {
this.msg = msg;
} public String process() {
return filterChain.doFilter(msg);
}
}

6.Test.java

 public class Test {

     @org.junit.Test
public void testFilter(){ MsgProcessor processor = new MsgProcessor(); String msg = "<html>敏感字眼</html>";
processor.setMsg(msg); FilterChain fc1 = new FilterChain();
fc1.addFilter(new HTMLFilter()); FilterChain fc2 = new FilterChain();
fc2.addFilter(new SensitiveFilter()); //由于FilterChain实现了Filter接口,所以FilterChain同时也是Filter,所以可以调用addFilter增加fc2
fc1.addFilter(fc2); processor.setFilterChain(fc1); String result = processor.process();
System.out.println(result); } }

三、运行结果

Java-马士兵设计模式学习笔记-责任链模式-FilterChain功能的更多相关文章

  1. Java-马士兵设计模式学习笔记-责任链模式-模拟处理Reques Response

    一.目标 1.用Filter模拟处理Request.Response 2.思路细节技巧: (1)Filter的doFilter方法改为doFilter(Request,Resopnse,FilterC ...

  2. Java-马士兵设计模式学习笔记-责任链模式-处理数据

    一.目标 数据提交前做各种处理 二.代码 1.MsgProcessor.java public class MsgProcessor { private List<Filter> filt ...

  3. Java设计模式学习记录-责任链模式

    前言 已经把五个创建型设计模式和七个结构型设计模式介绍完了,从这篇开始要介绍行为型设计模式了,第一个要介绍的行为型设计模式就是责任链模式(又称职责链模式). 责任链模式 概念介绍 责任链模式是为了避免 ...

  4. 学习笔记——责任链模式ChainOfResponsibility

    责任链模式,主要是通过自己记录一个后继者来判断当前的处理情况.Handler中,再增加一个方法用于设置后继对象,如SetHandler(Handler obj). 然后Handler类以其子类的处理方 ...

  5. 设计模式学习之责任链模式(Chain of Responsibility,行为型模式)(22)

    参考:http://www.cnblogs.com/zhili/p/ChainOfResponsibity.html 一.引言 在现实生活中,有很多请求并不是一个人说了就算的,例如面试时的工资,低于1 ...

  6. Java-马士兵设计模式学习笔记-装饰者模式

    Java装饰者模式简介 一.假设有一个Worker接口,它有一个doSomething方法,Plumber和Carpenter都实现了Worker接口,代码及关系如下: 1.Worker.java p ...

  7. Java-马士兵设计模式学习笔记-总结

    <马士兵设计模式学习>学习了以下模式: 1.装饰者模式(例子:水管工,木工) 2.策略模式(例子:老师用职称比大小.学生用成绩比大小) 3.简单工厂模式(例子:VechileFactory ...

  8. 编写计算器程序学习JS责任链模式

    设计模式中的责任链模式能够很好的处理程序过程的逻辑判断,提高程序可读性. 责任链模式的核心在于责任链上的元素判断能够处理该数据,不能处理的话直接交给它的后继者. 计算器的基本样式: 通过div+css ...

  9. Python使用设计模式中的责任链模式与迭代器模式的示例

    Python使用设计模式中的责任链模式与迭代器模式的示例 这篇文章主要介绍了Python使用设计模式中的责任链模式与迭代器模式的示例,责任链模式与迭代器模式都可以被看作为行为型的设计模式,需要的朋友可 ...

随机推荐

  1. Python实现ID3(信息增益)

    Python实现ID3(信息增益) 运行环境 Pyhton3 treePlotter模块(画图所需,不画图可不必) matplotlib(如果使用上面的模块必须) 计算过程 st=>start: ...

  2. 查找bad sql的方法:

    --查找bad sql的方法: select * from (select buffer_gets, sql_text from v$sqlarea ; -- 执行次数多的SQL select sql ...

  3. UIWebView swift

    // // ViewController.swift // UILabelTest // // Created by mac on 15/6/23. // Copyright (c) 2015年 fa ...

  4. VRP-Lua学习笔记

    至于vrp是什么东西以及为什么要学习vrp,vrp的简单操作这些问题请自行右转抵拢倒拐找百度或者去中视典官网去找教程,我这里不会在赘述. 今天默认我们已经会使用VRP的脚本编辑器,用其他语言来为VRP ...

  5. 微软职位内部推荐-SDEII for Windows Phone Apps

    微软近期Open的职位: Job title: Software Design Engineer II Location: China, Beijing Division: Operations Sy ...

  6. SqlServer中Sql语句的逻辑执行顺序

    准备数据 Sql脚本如下,两张表,一张客户表Customers只包含customerid和city字段,一张订单表Orders包含orderid和customerid(关联Customers的cust ...

  7. (补)PSP三张表

    学生     司新红 日期  2014.3.14 教师  王建民 项目计划总结 编程 完善程序 测试程序 阅读书籍 日总计 周日 10:00-10:30 pm 0.5 周一 10:00-10:30 p ...

  8. 关于js with语句的一些理解

    关于js with语句的一些理解   今天看到js的with语句部分,书中写到,with语句接收的对象会添加到作用域链的前端并在代码执行完之后移除.看到这里,我有两点疑问,添加到作用域链前端是不是指对 ...

  9. nodeJs事件之监听移除事件

    var EventEmitter=require('events').EventEmitter var life=new EventEmitter(); //comfort 求安慰,函数名: //fo ...

  10. Eclipse问题解决集

    1.tomcate 报 PermGen space 错误Exception in thread "main" java.lang.OutOfMemoryError: PermGen ...