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