现在的位置: 首页 > 综合 > 正文

Chain Of Responsibility—–设计模式

2013年10月29日 ⁄ 综合 ⁄ 共 2086字 ⁄ 字号 评论关闭

1.责任链,首先存在一个责任链,有一个问题,下面开始解决这个问题。从责任链的第一个节点开始来解决这个问题,如果这个节点不能解决,那么用下一个节点来解决,如果整个责任链都没有可以解决该问题的方法,那么就failed。

2.这个模式比较简单明了,下面是一个例子:

package com.cn;

class Trouble {
	private int number;
	public Trouble(int number) {
		this.number = number;
	}
	public int getNumber() {
		return number;
	}
	public String toString() {
		return "[Trouble " + number + "]";
	}
}



abstract class Support {
	private String name;
	private Support next;
	public Support(String name) {
		this.name = name;
	}
	public Support setSupport(Support next) {
		this.next = next;
		return next;
	}
	public final void support(Trouble trouble) {
		if (resolve(trouble)) {
			done(trouble);
		}
		else if (next != null) {
			next.support(trouble);
		}
		else {
			fail(trouble);
		}
	}
	
	public String toString() {
		return "[" + name + "]";
	}
	protected abstract boolean resolve(Trouble trouble);
	protected void done(Trouble trouble) {
		System.out.println(trouble + "is resolved by" + this + ".");
	}
	protected void fail(Trouble trouble) {
		System.out.println(trouble + "cannot be resovled.");
	}
}



class NoSupport extends Support {
	public NoSupport(String name) {
		super(name);
	}
	protected boolean resolve(Trouble trouble) {
		return false;
	}
}


class LimitSupport extends Support {
	private int limit;
	public LimitSupport(String name, int limit) {
		super(name);
		this.limit = limit;
	}
	protected boolean resolve(Trouble trouble) {
		if (trouble.getNumber() < limit) {
			return true;
		}
		else {
			return false;
		}
	}
}


class OddSupport extends Support {
	public OddSupport(String name) {
		super(name);
	}
	protected boolean resolve(Trouble trouble) {
		if (trouble.getNumber() % 2 == 1) {
			return true;
		}
		else {
			return false;
		}
	}
}



class SpecialSupport extends Support {
	private int number;
	public SpecialSupport(String name, int number) {
		super(name);
		this.number = number;
	}
	protected boolean resolve(Trouble trouble) {
		if(trouble.getNumber() == number) {
			return true;
		}
		else {
			return false;
		}
	}
}

public class Main {
	public static void main(String[] args) {
		Support alice = new NoSupport("Alice");
		Support bob = new LimitSupport("Bob",100);
		Support charlie = new SpecialSupport("Charlie",429);
		Support diana = new LimitSupport("Diana",200);
		Support elmo = new OddSupport("Elmo");
		Support fred = new LimitSupport("Fred",300);
		//create the chain of responsibility
		alice.setSupport(bob).setSupport(charlie).setSupport(diana).setSupport(elmo).setSupport(fred);
		for (int i = 0; i < 500; i += 33) {
			alice.support(new Trouble(i));
		}
		
	}
}
【上篇】
【下篇】

抱歉!评论已关闭.