アダプタモードの小さな例
1778 ワード
最近、アダプタモードを勉強しているが、アダプタモードとは何かを直感的に感じる適切な例が見つからない.簡単な例を次に示します.アダプターモードに関する知識はまず自分で勉強してください.
アダプタモードのコアアダプタは自分で定義されています. アダプタはターゲットインタフェースを実現する. アダプタは、アダプタインタフェース(オブジェクト)の参照を有する. のターゲットオブジェクト(インタフェース)に対する呼び出しは、実際には適合オブジェクト(インタフェース)に転送される.
例を挙げる
多くのレガシーコードでは、servletのgetParameterNameメソッドで定義されているように、メソッドの戻り値はEnumerationです.
したがって,このメソッドが返す集合を列挙するしかない.次のようになります.
問題は、現在では反復器(Iterator)で集合を巡回していることですが、getParameterNameで返される集合をコード内で統一的な反復器で巡回したい場合はどうすればいいですか?アダプタが役に立ちました.
ここではEnumerationをIteratorとして使いたいので、Iteratorはターゲットインタフェースであり、Enumerationはアダプティブインタフェースである
IteratorへのEnumerationのアダプタを次のように定義します.
アダプタの使用
この場合、反復器に従って列挙タイプを巡回することができます.
以上から分かるように、本当に仕事をしているのはやはりEnumerationで、アダプタの層の包装を通じて、外部からIteratorを使っていると思っています.すなわち、アダプターによって、ターゲットインタフェースに対する呼び出しが、適切に割り当てられたオブジェクトに転送される
アダプタモードのコア
例を挙げる
多くのレガシーコードでは、servletのgetParameterNameメソッドで定義されているように、メソッドの戻り値はEnumerationです.
public Enumeration getParameterNames();
したがって,このメソッドが返す集合を列挙するしかない.次のようになります.
Enumeration parameterNames = req.getParameterNames();
while (parameterNames.hasMoreElements()) {
String s = (String) parameterNames.nextElement();
System.out.println(s);
}
問題は、現在では反復器(Iterator)で集合を巡回していることですが、getParameterNameで返される集合をコード内で統一的な反復器で巡回したい場合はどうすればいいですか?アダプタが役に立ちました.
ここではEnumerationをIteratorとして使いたいので、Iteratorはターゲットインタフェースであり、Enumerationはアダプティブインタフェースである
IteratorへのEnumerationのアダプタを次のように定義します.
public class EnumIter implements Iterator {// 1:
private Enumeration e;// 2: ( )
public EnumIter(Enumeration e){
this.e = e;
}
//
public boolean hasNext() {
return e.hasMoreElements();
}
public Object next() {
return e.nextElement();
}
public void remove() {
}
}
アダプタの使用
この場合、反復器に従って列挙タイプを巡回することができます.
Enumeration parameterNames = req.getParameterNames();
Iterator enumIter = new EnumIter(parameterNames);// Iterator
while (enumIter.hasNext()) {
String s = (String) enumIter.next();
System.out.println(s);
}
以上から分かるように、本当に仕事をしているのはやはりEnumerationで、アダプタの層の包装を通じて、外部からIteratorを使っていると思っています.すなわち、アダプターによって、ターゲットインタフェースに対する呼び出しが、適切に割り当てられたオブジェクトに転送される