常用设计模式总结--责任链模式

常用设计模式总结--责任链模式

在多线程的编程模型中,责任链模式是一种常用的模式,责任链模式可以将一个任务分解成小的独立的任务单元,让整个任务一目了然。

以一个爬虫爬取某个页面为例,假设url的调度不是有爬虫来管理,而是有专门的urldb模块来实现,那么一个网页的爬取可以分解为以下几个小的子任务。下载网页;解析网页;将当前页面新发现的链接写回urldb。将任务分解成小任务以后,每个小任务的输出就是下一个任务的输入,整个框架就可以清晰明了。辅助于log的信息,在出现问题的时候很容易查找问题出现的地方

废话少说,直接看代码吧

Processor.java

public abstract class Processor {

	private Processor next;
	protected int delta;
	public abstract int doProcess(int base);
	
	public void setNext( Processor next ){
		this.next = next;
	}
	
	public void process(int base){
		int result = doProcess(base);
		if( null != next ){
			next.process(result);
		}
	}
}


ProcessorChainFactory,负责把小的任务组合起来

package zl.study.designpattern.respchain;

public class ProcessorChainFactory {

	public static Processor assembleChain( Processor ...processor){
		Processor head = null;
		Processor pre = null;
		if( null == processor || 0 >= processor.length){
			return head;
		}
		
		for(int i = 0; i< processor.length; i ++){
			Processor current = processor[i];
			if( i == 0){
				head =current;
			}
			if( null != pre){
				pre.setNext(current);
			}
			pre = current;
		}
		return head;
	}
	
}

示例程序

算了一个算术题

ProcessorAdd.java 加法

package zl.study.designpattern.respchain.test;

import zl.study.designpattern.respchain.Processor;

public class ProcessorAdd extends Processor{

	public ProcessorAdd(int delta){
		this.delta = delta;
	}
	
	@Override
	public int doProcess(int base) {
		int result = base + delta;
		System.out.println(result);
		return result;
	}
}

ProcessorSub.java 减法

package zl.study.designpattern.respchain.test;

import zl.study.designpattern.respchain.Processor;

public class ProcessorSub extends Processor{

	public ProcessorSub( int delta){
		this.delta = delta;
	}
	@Override
	public int doProcess(int base) {
		int result = base -delta;
		System.out.println(result);
		return result;
	}
}

主程序

package zl.study.designpattern.respchain.test;

import zl.study.designpattern.respchain.ProcessorChainFactory;

public class RespChainTest {

	public static void main(String args[]){
		ProcessorAdd add = new ProcessorAdd(1);
		ProcessorSub sub = new ProcessorSub(2);
		
		ProcessorChainFactory.assembleChain(add,sub);
		add.process(1);
	}
}




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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值