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

原创 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();
    }
}


 

链家网堡垒机实现以及用户访问权限设计

-
  • 1970年01月01日 08:00

【设计模式】责任链4-链接链

紧接着上一个问题来: 为了不要跟原来的代码冲突,又新建了一个工程,将所有代码放在一起。 代码清单:(为了测试简洁,去掉了FaceFilter.java) Filter.java FilterChai...
  • u013517797
  • u013517797
  • 2015-03-27 11:27:12
  • 937

责任链设计模式例子

原文地址: 1.http://www.cnblogs.com/manmanlu/p/5732979.html 2.http://www.cnblogs.com/jyyzzjl/p/5187376....
  • disiwei1012
  • disiwei1012
  • 2016-12-10 11:37:56
  • 877

责任链设计模式(过滤器/拦截器)

责任链设计模式(Chain of Responsibility)的应用有:Java Web中的过滤器链、springmvc中的拦截器链,Struts2中的拦截器栈等等。        先看如下一个问题...
  • zmx729618
  • zmx729618
  • 2016-05-27 10:53:42
  • 1743

Java设计模式之责任链模式、职责链模式

继续介绍23种设计模式系列,本文介绍的是职责链模式。
  • jason0539
  • jason0539
  • 2015-04-18 07:41:22
  • 26954

责任链设计模式(过滤器)

责任链设计模式(过滤器、拦截器) 责任链设计模式(Chain of Responsibility)的应用有:Java Web中的过滤器链、Struts2中的拦截器栈。 先看...
  • duchao123duchao
  • duchao123duchao
  • 2016-03-25 09:45:44
  • 842

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

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

java设计模式(四)——单例、观察者、代理、备忘录、工厂

一、Singleton单例模式 Singleton单例模式是最简单的设计模式,它的主要作用是保证在程序运行生命周期中,使用了单类模式的类只能有一个实例对象存在。 1、饱汉模式,声明时就创建实例...
  • huangzebiao007
  • huangzebiao007
  • 2013-10-20 02:09:33
  • 1686

设计模式---责任链模式(C++实现)

责任链模式(Chain of Responsibility Pattern)为请求创建一个接受者对象的链。这种模式给与请求的类型,对请求的发送者和接受者进行解耦。属于行为型模式。 在这种模式...
  • My_heart_
  • My_heart_
  • 2017-03-16 15:48:31
  • 678

【JS设计模式】责任链模式的代码示例

责任链设计模式: 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这...
  • itpinpai
  • itpinpai
  • 2016-06-07 10:39:26
  • 9098
收藏助手
不良信息举报
您举报文章:几年后再倒回来复习 马士兵老师的责任链设计模式实现方式 仍然很经典
举报原因:
原因补充:

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