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