设计模式---责任链模式

责任链模式是WBE中常用的一种模式,他的目的是使多个对象都有机会能够处理请求,避免请求的发送者和接受请求者之间的耦合关系,作用是解耦。

将这些对象串成一个链子,让请求沿着这个链子传递下去直到处理完成,他的实现很简单。

这里我们要讲学习设计模式就和打太极一样、切勿生搬硬套一定要符合设计模式什么的、设计模式只是传达一个思想,在实际应用中能够结合考虑,不一定要在设计中使用设计模式,只要复合软件设计原则的就可以。


设计链模式有两种实现方式

第一种是请求有单独的处理对象完成,如果完成不了那么就传递给下一个处理对象对象,直到完成且必须要完成。

第二种是请求经过每个处理对象,处理对象完成各自能够完成的处理传递给下一个对象。



责任链模式有两个主要角色

1.抽象处理者角色:定义处理请求的接口

2.具体处理这角色:继承抽象处理者角色,实现处理请求接口。


这里给大家提供例子例如web中常用的过滤器

抽象处理角色

/**
 * 
 */
package com.model.chain;

//抽象处理角色
public interface MessagesFilter {
	
	//定义处理请求接口
	public String doFilter(String msg);
	
}

具体抽象角色

/**
 * 
 */
package com.model.chain;

//session过滤
public class SessionFilter implements MessagesFilter {

	private SensitiveFilter sensitive;
	
	
	/* (non-Javadoc)
	 * @see com.model.chain.MessagesFilter#doFilter(java.lang.String)
	 */
	public SensitiveFilter getSensitive() {
		return sensitive;
	}


	public void setSensitive(SensitiveFilter sensitive) {
		this.sensitive = sensitive;
	}


	@Override
	public String doFilter(String msg) {
		System.out.println("这里过滤session");
		//这里做了个死代码、只做个范例
		if(true){
			return "";
		}else{
			return getSensitive().doFilter(msg); 
		}
	}

}

/**
 * 
 */
package com.model.chain;

//敏感词过滤
public class SensitiveFilter implements MessagesFilter {

	/* (non-Javadoc)
	 * @see com.model.chain.MessagesFilter#doFilter(java.lang.String)
	 */
	@Override
	public String doFilter(String msg) {
		System.out.println("这里处理敏感词");
		return "";
	}

}

总结

       责任链的最大好处就是降低了程序的耦合、提高程序的灵活性,但是他也有个缺点、所有的请求都要从链子的开头开始执行,可能会增加消耗,所以没有完美的设计模式,只能通过各种设计思想来设计出最合适的程序。


你可能感兴趣的:(设计模式---责任链模式)