インタフェース型モードのアダプタモード

5185 ワード

1.クラスの外部インタフェースをお客様が望むインタフェースに適合させる場合は、Adapter(アダプタ)モードを使用します.2.タイプ:クラスアダプタ、オブジェクトアダプタ.3.例:3.1 umlモデル3.2ソースコード
//    
public interface Socket {
    public void hole();  
}
//         
public class OneSocket {
public void oneHole() {  
        System.out.println("    ");  
    }  
}   
//         
public class ThreeSocket {
public void threeHole() {  
        System.out.println("    ");  
    }  
}
//       :       </span>
public class TweSocket implements Socket {
    public void hole() {
        System.out.println("    ");
    }
}
//          :          
public class OneSocketAdapter extends OneSocket implements Socket{
    @Override
    public void hole() {
        super.oneHole();
    }
}
//           :                
class SocketAdapter implements Socket{  
    private ThreeSocket threeSocket = null;  
    private OneSocket oneSocket = null;  

    public SocketAdapter(ThreeSocket threeSocket) {
        this.threeSocket = threeSocket;  
    }

    public SocketAdapter(OneSocket oneSocket) {
        this.oneSocket = oneSocket;  
    }

    public void hole() {   
        if(threeSocket!=null){
            threeSocket.threeHole();
        }
        if(oneSocket!=null){
            oneSocket.oneHole();
        }  
    }  
}
//   
public class Client {
    public static void main(String[] args) {  
        //        :    
        TweSocket tweSocket = new TweSocket();    
        tweSocket.hole();  
        //           :    
        Socket threeSocket = new SocketAdapter(new ThreeSocket());  
        threeSocket.hole();  
        //           :    
        Socket oneSocket = new SocketAdapter(new OneSocket());  
        oneSocket.hole(); 

        //          :    
        OneSocketAdapter oneSocket1 = new OneSocketAdapter();
         oneSocket1.hole();
    } 
}

4.結論:javaはマルチ継承をサポートしていないため、クラスアダプタは既存のクラスと実装ターゲットインタフェースを継承するために適合クラスを書き直すたびに、実装インタフェースメソッドで親クラスのメソッドを呼び出して適合する必要がある.オブジェクトアダプタは、1つの適合クラスが直接ターゲットインタフェースを実現し、構造関数に基づいて入力されたクラスに基づいてインタフェースメソッドを適合させる、すなわち、すでに存在するクラスが適合クラスに適合を依頼して適合作業を行う.したがって、オブジェクトアダプタはより柔軟です.5.参考:http://blog.csdn.net/jason0539/article/details/22468457