最終更新日 : 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
実装ノート
更新履歴