您的位置:首页 > 其它

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

2013-06-18 16:06 579 查看
时隔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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: