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

时隔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();
    }
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值