アダプタモードの小さな例

1778 ワード

最近、アダプタモードを勉強しているが、アダプタモードとは何かを直感的に感じる適切な例が見つからない.簡単な例を次に示します.アダプターモードに関する知識はまず自分で勉強してください.
アダプタモードのコア
  • アダプタは自分で定義されています.
  • アダプタはターゲットインタフェースを実現する.
  • アダプタは、アダプタインタフェース(オブジェクト)の参照を有する.
  • のターゲットオブジェクト(インタフェース)に対する呼び出しは、実際には適合オブジェクト(インタフェース)に転送される.

  • 例を挙げる
    多くのレガシーコードでは、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を使っていると思っています.すなわち、アダプターによって、ターゲットインタフェースに対する呼び出しが、適切に割り当てられたオブジェクトに転送される