几年后再倒回来复习 马士兵老师的责任链设计模式实现方式 仍然很经典

原创 2013年06月18日 16:06:00

时隔2年,现在已经从java走向了c# , 复习设计模式的时候想起马士兵老师的责任链实现方式, 太经典了,经典的不是这个链的实现,而是他将责任链类也实现了接口,这样链本身也是一个Filter,从而可以实现将该类的实例当成Filter添加到该类的实例中。

 

using System;
using System.Collections.Generic;

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

public class FilterChain : Filter
{
    List<Filter> filters = new List<Filter>();
    public FilterChain addFilter(Filter f)
    {
        this.filters.Add(f);
        return this;
    }

    public String doFilter(String str)
    {
        String r = str;
        foreach (Filter f in filters)
        {
            r = f.doFilter(r);
        }
        return r;
    }
}

public class HTMLFilter : Filter
{
    public String doFilter(String str)
    {
        String r = str.Replace('<', '[')
                   .Replace('>', ']');
        return r;
    }
}


public class SensitiveFilter : Filter
{
    public String doFilter(String str)
    {
        String r = str.Replace("被就业", "就业")
             .Replace("敏感", "");

        return r;
    }

}

public class FaceFilter : Filter
{
    public String doFilter(String str)
    {
        return str.Replace(":)", "^V^");
    }

}

public class MsgProcessor
{
    public FilterChain Fc { get; set; }
    public string Msg { get; set; }
    public String process()
    {
        return Fc.doFilter(this.Msg);
    }
}

public class Program
{
    static void Main(string[] args)
    {
        String msg = "大家好:),<script>,敏感,被就业,网络授课没感觉,因为看不见大家伙儿";
        MsgProcessor mp = new MsgProcessor();
        mp.Msg=msg;

        FilterChain fc = new FilterChain().addFilter(new HTMLFilter()).addFilter(new SensitiveFilter());

        FilterChain fc2 = new FilterChain().addFilter(new FaceFilter());
        
        fc.addFilter(fc2);//经典之处,将1个链添加到另一个链

        mp.Fc=fc;
        String result = mp.process();
        Console.WriteLine(result);//字符串非法字符过滤掉的结果
        Console.Read();
    }
}


 

相关文章推荐

使用自动生成java文件和自动编译的动态代理模式-马士兵设计模式教程

/* * 接口中有几个方法,那么使用反射的getMethods()就会有几个方法名 * 因为接口是不会继承Object的 */ public interface Moveable { ...

责任链或过滤器模式3-模拟tomcat的过滤器-马士兵设计模式教程 .

//过滤器接口 public interface Filter { public void doFilter(Request req,Response res,FilterChain c); ...

责任链或过滤器模式2-使用过滤链-马士兵设计模式教程 .

//过滤器接口 public interface Filter { public String doFilter(String str); } //HTML的过滤器 public ...

设计模式之责任链模式Java实现

  • 2013年05月02日 22:42
  • 23KB
  • 下载

责任链设计模式模拟Java Web过滤器的实现

前言 Tomcat容器以及一些Web框架都使用了责任链设计模式来对请求和响应进行逐步的处理或者过滤,本文使用Java语言来模拟过滤器的实现。其序列图如下: 如果简单的使用责任链模式...

Java Learning Path(马士兵老师)

转自:http://www.bjsxt.com/news/157.html 作者:马士兵 Java Learning Path(一)、工具篇 1、 JDK (Java Develop...
  • YTTCJJ
  • YTTCJJ
  • 2011年09月22日 16:15
  • 711

Java Learning Path(马士兵老师)

Java Learning Path(一)、工具篇 1、 JDK (Java Development Kit)  JDK 是整个Java的核心,包括了Java运行环境(Java Runtime...

关于马士兵老师的介绍_01

1.马士兵 百度百科:http://baike.baidu.com/view/1882862.htm 简介  1998 年毕业于清华大学,先后在IBM、澳大利亚GoldenTech工作多年,历任程序...

设计模式之(命令+责任链)

  • 2016年08月03日 16:57
  • 9KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:几年后再倒回来复习 马士兵老师的责任链设计模式实现方式 仍然很经典
举报原因:
原因补充:

(最多只允许输入30个字)