行为型模式--责任链(一)

本文是翻译马士兵设计模式视频资料

责任链适应图

这里写图片描述

那条线代表正常处理业务类

**整个过程的目的就是处理一个字符串 包括:脚本处理 、 敏感字符处理 、表情字符处理 MsgProcessor里面封装了这个字符串 **

package com.hfview.designMode.zerenlian.common;

public class MsgProcessor {
	private String msg;
	
	FilterChain fc;
	
	public FilterChain getFc() {
		return fc;
	}

	public void setFc(FilterChain fc) {
		this.fc = fc;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public String process() {
		
		
		return fc.doFilter(msg);
		
		
	}
}

其中FilterChain是封装很多对类处理的处理类
对于各种处理类应该抽象一个接口

package com.hfview.designMode.zerenlian.common;

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

第一个处理(过滤脚本处理)

package com.hfview.designMode.zerenlian.common;

public class HTMLFilter implements Filter {

	public String doFilter(String str) {
		//process the html tag <>
		String r = str.replace('<', '[')
				   .replace('>', ']');
		return r;
	}

}

第二个处理敏感字段处理

package com.hfview.designMode.zerenlian.common;

public class SesitiveFilter implements Filter {

	public String doFilter(String str) {
		//process the sensitive words
		String r = str.replace("被就业", "就业")
			 .replace("敏感", "");
		
		return r;
	}

}

第三个处理(表情符号处理)

package com.hfview.designMode.zerenlian.common;

public class FaceFilter implements Filter {

	public String doFilter(String str) {
		return str.replace(":)", "^V^");
	}

}

如果处理链不包括其他处理链FilterChain

package com.hfview.designMode.zerenlian.common;

import java.util.ArrayList;
import java.util.List;

public class FilterChain {
	List<Filter> filters = new ArrayList<Filter>();
	
	public FilterChain addFilter(Filter f) {
		this.filters.add(f);
		return this;
	}
	
	public String doFilter(String str) {
		String r = str;
		for(Filter f: filters) {
			r = f.doFilter(r);
		}
		return r;
	}
}

调用测试类

package com.hfview.designMode.zerenlian.common;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String msg = "大家好:),<script>,敏感,被就业,网络授课没感觉,因为看不见大家伙儿";
		MsgProcessor mp = new MsgProcessor();
		mp.setMsg(msg);
		FilterChain fc = new FilterChain();
		fc.addFilter(new HTMLFilter())
		  .addFilter(new SesitiveFilter());
		mp.setFc(fc);
		String result = mp.process();
		System.out.println(result);
	}

}

对于如果将处理链也来分类的话,比如分类一是:对字符的处理 分类二:对语法分析。每一种分类都包含很多详细的处理类,这样分业务更清楚,或者想在分类一的部分中插入另外一种分类那么上面这种情况就不满足了。

第二种适应图

这里写图片描述

更改后的FilterChain

package com.hfview.designMode.zerenlian.common;

import java.util.ArrayList;
import java.util.List;

public class FilterChain implements Filter {
	List<Filter> filters = new ArrayList<Filter>();
	
	public FilterChain addFilter(Filter f) {
		this.filters.add(f);
		return this;
	}
	
	public String doFilter(String str) {
		String r = str;
		for(Filter f: filters) {
			r = f.doFilter(r);
		}
		return r;
	}
}

巧妙的就是FilterChain也继承Filter接口

第二个测试类

package com.hfview.designMode.zerenlian.common;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String msg = "大家好:),<script>,敏感,被就业,网络授课没感觉,因为看不见大家伙儿";
		MsgProcessor mp = new MsgProcessor();
		mp.setMsg(msg);
		FilterChain fc = new FilterChain();
		fc.addFilter(new HTMLFilter())
		  .addFilter(new SesitiveFilter())
		  ;
		  //第二个FilterChain 可以随便插入位置
		FilterChain fc2 = new FilterChain();
		fc2.addFilter(new FaceFilter());
		
		fc.addFilter(fc2);
		mp.setFc(fc);
		String result = mp.process();
		System.out.println(result);
	}

}

总结

目前为止,只是学了设计模式,感觉用处还挺大的,等我正在在项目中使用的时候在详细补充

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值