`
TRAMP_ZZY
  • 浏览: 132010 次
社区版块
存档分类
最新评论

设计模式-责任链模式

阅读更多
Avoid coupling the sender of a request to its receiver by giving more than one object a chance
	to handle the request. Chain the receiving objects and pass the request along the chain until
	an object handles it.
	使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,
	并沿着这条链传递该请求,直到有对象处理它。
	
	责任链模式的核心在“链”上,“链”是由多个处理者组成的。
	
	public abstract class Handler {

		private Handler nextHandler;
		
		public final Response handleMessage(Request request) {
			Response response = null;
			if (this.getHandlerLevel().equals(request.getRequestLevel())) {
				response = this.echo(request);
			} else {
				if (this.nextHandler != null) {
					response = this.nextHandler.handleMessage(request);
				} else {
					// TODO
				}
			}
			return response;
		}
		
		public void setNext(Handler handler) {
			this.nextHandler = handler;
		}
		
		protected abstract Level getHandlerLevel();
		
		protected abstract Response echo(Request request);
	}
	
	public class Level {

	}
	
	public class Request {

		public Level getRequestLevel() {
			return null;
		}
	}
	
	public class Response {

	}
	
	public class ConcreteHandler1 extends Handler {

		@Override
		protected Level getHandlerLevel() {
			// TODO Auto-generated method stub
			return null;
		}

		@Override
		protected Response echo(Request request) {
			// TODO Auto-generated method stub
			return null;
		}

	}
	
	public class ConcreteHandler2 extends Handler {

		@Override
		protected Level getHandlerLevel() {
			// TODO Auto-generated method stub
			return null;
		}

		@Override
		protected Response echo(Request request) {
			// TODO Auto-generated method stub
			return null;
		}

	}
	
	public class ConcreteHandler3 extends Handler {

		@Override
		protected Level getHandlerLevel() {
			// TODO Auto-generated method stub
			return null;
		}

		@Override
		protected Response echo(Request request) {
			// TODO Auto-generated method stub
			return null;
		}

	}
	
	public class Client {

		public static void main(String[] args) {
			
			Handler handler1 = new ConcreteHandler1();
			Handler handler2 = new ConcreteHandler2();
			Handler handler3 = new ConcreteHandler3();
			handler1.setNext(handler2);
			handler2.setNext(handler3);
			
			Response response = handler1.handleMessage(new Request());
		}

	}
	
	在实际应用中,一般会有一个封装类对责任模式进行封装,也就是替代Client 类,直接返回链中的第一个处理者,
	具体的设置不需要高层次模块关系,这样,更简化了高层次模块的调用,较少了耦合。
	
	JavaEE 系统的复杂用户登录可以通过责任链链处理。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics