最終更新日 : 2002/12/15 (2002/12/15 より)
Bridge
Bridge の導入
import java.util.List; public class Abstraction { public void printList(List list) { for (int i = 0 ; i < list.size() ; i++) { System.out.println( list.get(i) ); } System.out.println(); } }
import java.util.List; public class RefinedAbstraction extends Abstraction { public void printListAndHeader(List list, String header) { System.out.println(header); printList(list); } }
import java.util.List; public interface Implementor { public void printListImpl(List list); }
import java.util.List; import java.util.Iterator; public class ConcreteImplementor implements Implementor { public void printListImpl(List list) { System.out.println("ConcreteImplementor"); // 動作確認用 Iterator itr = list.iterator(); while ( itr.hasNext() ) { System.out.println( itr.next() ); } System.out.println(); } }
public class Client { public static void main(String[] args) { String[] strs = {"aaa", "bbb", "ccc"}; List list = Arrays.asList(strs); Abstraction ab = new Abstraction(); ab.printList(list); ab.setImplementor( new ConcreteImplementor() ); ab.printList(list); RefinedAbstraction ra = new RefinedAbstraction(); ra.printListAndHeader(list, "***"); ra.setImplementor( new ConcreteImplementor() ); ra.printListAndHeader(list, "***"); } }
import java.util.List; public aspect BridgeAspect { private Implementor Abstraction.impl; pointcut printList(Abstraction obj, List list) : target(obj) && args(list) && call( void Abstraction.printList(List) ) && if (obj.impl != null); void around(Abstraction obj, List list) : printList(obj, list) { obj.impl.printListImpl(list); } public void Abstraction.setImplementor(Implementor impl) { this.impl = impl; } }
aaa bbb ccc ConcreteImplementor aaa bbb ccc *** aaa bbb ccc *** ConcreteImplementor aaa bbb ccc
実装ノート
更新履歴