AspectJ を使ったデザインパターンの改善と支援 >
Chain of Responsibility

asato <asato@ncfreak.com>

最終更新日 : 2003/11/26 (2003/11/26 より)

実装 - その 1

public interface Handler {
	public void handleRequest();
}
public class ConcreteHandlerA implements Handler {
	public void handleRequest() {
		System.out.println("ConcreteHandlerA.handleRequest()");
	}
}
public class ConcreteHandlerB implements Handler {
	public void handleRequest() {
		System.out.println("ConcreteHandlerB.handleRequest()");
	}
}
public class ConcreteHandlerC implements Handler {
	public void handleRequest() {
		System.out.println("ConcreteHandlerC.handleRequest()");
	}
}
public aspect Connector pertarget( target(Handler) ) {

	private Handler successor;

	public void connect(Handler successor) {
		this.successor = successor;
	}

	void around() : call( void Handler.handleRequest() ) {
		if (successor != null) {
			successor.handleRequest();
		} else {
			proceed();
		}
	}
}
public class Client {

	public static void main(String[] args) {

		ConcreteHandlerA handlerA = new ConcreteHandlerA();
		ConcreteHandlerB handlerB = new ConcreteHandlerB();
		ConcreteHandlerC handlerC = new ConcreteHandlerC();

		handlerA.handleRequest();
		handlerB.handleRequest();
		handlerC.handleRequest();


		Connector.aspectOf(handlerA).connect(handlerB);

		handlerA.handleRequest();


		Connector.aspectOf(handlerB).connect(handlerC);

		handlerA.handleRequest();
	}
}
実行結果:
ConcreteHandlerA.handleRequest()
ConcreteHandlerB.handleRequest()
ConcreteHandlerC.handleRequest()
ConcreteHandlerB.handleRequest()
ConcreteHandlerC.handleRequest()

参考文献とリソース

リソース:

更新履歴

todo

[
戻る ]