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

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


 

责任链模式进阶:与AOP思想的融合与应用

AOP的理念可以很容易抽象出横切关注点,基于AOP理念我们可以将责任链模式中各具体处理角色中共同逻辑抽象出来并将其模块化以便提高代码复用率和系统可维护性。Java Web中的过滤器和Struts2中的...
  • justloveyou_
  • justloveyou_
  • 2017年03月30日 18:15
  • 3000

【转】Java自学之路——by马士兵 (java自学之前思想准备)

【转】Java自学之路——by马士兵 作者:马士兵老师  JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训。  决心做软件的,大多数人选的是ja...
  • kaluluosi111
  • kaluluosi111
  • 2013年06月13日 10:10
  • 4027

马士兵教你如何面试(记录原话)

//2015年5月2日 //重要的是展现自己! 一、不要只回答对与错 应试教育害死人,拿到问题就在不停地想,到底是对还是错; 其实对错不是很重要,重要的是为什么对,为什么错。 这样回答的话就算你回答不...
  • u013599826
  • u013599826
  • 2015年06月28日 17:04
  • 938

马士兵JAVA学习路线图(一) 入门篇

本文章着重介绍马士兵的java课程视频的观看顺序,给刚入门的菜鸟一个准确的学习路线。一些视频由于verycd上有资源,所以就不额外贴出来,一些绝版资源会以超链接的方式给出。 思想准备:自学之路 看...
  • kaluluosi111
  • kaluluosi111
  • 2013年06月13日 10:05
  • 4302

马士兵 Servlet_JSP(2) JSP源代码)

1.最简单的JSP HelloWorld.jsp             Hello                                     out.pr...
  • u012463017
  • u012463017
  • 2015年04月23日 20:21
  • 864

马士兵java学习之路

作者:马士兵老师 JAVA自学之路 一:学会选择为了就业,不少同学参加各种各样的培训。 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机、嵌入式、游戏、3G、测试等。那么究竟...
  • u013447988
  • u013447988
  • 2017年04月22日 12:38
  • 848

浅谈JAVA设计模式之——责任链模式(COR)

一、概述 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链, 并沿着这条链传递该请求,直到有一个对象处理它为止。 这一模式的想法是,给多个对象处理一个请求的...
  • l1028386804
  • l1028386804
  • 2015年05月08日 00:12
  • 2151

spring笔记 马士兵

课程内容 1.     面向接口(抽象)编程的概念与好处 2.     IOC/DI的概念与好处 a)     inversion of control b)     dependency injec...
  • llwszjj
  • llwszjj
  • 2014年03月15日 17:09
  • 1039

马士兵hibernate笔记

课程内容 1        HelloWorld a)   Xml b)   annotation 2        Hibernate原理模拟 - 什么是O/R Mapp...
  • l55iuming
  • l55iuming
  • 2015年10月17日 22:04
  • 988

【马士兵】笔记_Java网络编程

有道云笔记 连接: http://note.youdao.com/noteshare?id=73a73d444af9b9165649e572f9f1feb4 -------------...
  • na_simon2900086
  • na_simon2900086
  • 2016年11月15日 05:39
  • 461
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:几年后再倒回来复习 马士兵老师的责任链设计模式实现方式 仍然很经典
举报原因:
原因补充:

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