责任链模式

责任链模式

责任链模式的定义

应用场景举例

Android中的Touch事件传递java

Html Dom onClick事件传递web

Netty中InBound、OutBound消息处理ChannelPipeline设计模式

 

责任链模式UML

实际案例

服务器向手机端APP推送消息:服务器

当有网络而且手机端APP在线时候优先使用WebSocekt;websocket

当手机休眠的时候,没法使用websocket,改成使用华为推送服务向手机APP发送消息;网络

当华为推送也失败的时候,改成使用短信息来发送消息。socket

 

public abstract class Handler {
	
	protected Handler mNextHandler;
	public void setSuccessor(Handler h) {
		mNextHandler = h;
	}
	
	public abstract void handleRequest(Message msg) ;
}

 

public class WebSocketHandler extends Handler{

	@Override
	public void handleRequest(Message msg) {
	   if(isOnLine()) {
		    sendSocketMessage();
		    return;
		   
	   }
	   super.mNextHandler.handleRequest(msg);
		
	}

	private void sendSocketMessage() {
		System.out.println("WebSocketHandler sendSocketMessage ");
	}

	private boolean isOnLine() {
		return false;
	}

}

 

public class MiPushHandler extends Handler {

	@Override
	public void handleRequest(Message msg) {
	   if(isCanPush()) {
		    sendPushMessage();
		    return;
		   
	   }
	   super.mNextHandler.handleRequest(msg);
		
	}

	private void sendPushMessage() {
		System.out.println("MiPushHandler sendPushMessage ");
	}

	private boolean isCanPush() {
		return false;
	}

}

 

public class MmsHandler extends Handler{

	@Override
	public void handleRequest(Message msg) {
		
		sendMms();
		
	}

	private void sendMms() {
		System.out.println("MmsHandler sendMms ");
	}

}
public static void main(String[] args) {
	
        WebSocketHandler webSocketHandle = new WebSocketHandler();
        MiPushHandler miPushHandler = new MiPushHandler();
        MmsHandler mmsHandler = new MmsHandler();
        
        webSocketHandle.setSuccessor(miPushHandler);
        miPushHandler.setSuccessor(mmsHandler);
       // 启动消息泵
        Message msg = new Message();
        webSocketHandle.handleRequest(msg);
        
}

责任链模式的优缺点

类似的设计模式

相关文章
相关标签/搜索