アダプターモードの定義:2つの互換性のないクラスを一緒に使用します。これは、構造モードに属し、2つのアイデンティティが必要です:Adaptee(Adapter)とAdapter(Adapter)。
アダプターモードを使用する理由
多くの場合、最初のソリューションを組み合わせる必要がある2つの無関係なクラスに遭遇します。各クラスのインターフェイスを変更するか、ソースコードを持っていない場合、または1つのアプリケーションのインターフェイスを変更したくない場合です。 何をするか?
アダプターを使用して、これら2つのインターフェイスの間にハイブリッドインターフェイス(ハイブリッド)を作成します。
アダプターモードの使用方法
アダプターメソッドを実装するには、「Think in Java」の「クラス再生」セクションで言及されています。構成と継承の2つの方法があります。
山を運転したいと仮定すると、正方形の杭と円形の杭の2つのタイプがあります。
コードコピーは次のとおりです。
パブリッククラスSquarepeg {
public void insert(string str){
system.out.println( "squarepeg insert():"+str);
}
}
パブリッククラスRoundPeg {
public void insertintohole(string msg){
System.out.println( "RoundPeg InsertIntoHole():"+msg);
}
}
現在、正方形の山と円形の杭の両方を必要とするアプリケーションがあります。次に、これらの2つの無関係なクラスを包括的に適用する必要があります。RoundPegにはソースコードがないと仮定します。
コードコピーは次のとおりです。
パブリッククラスのペガダプターはSquarepegを拡張します{
プライベートRoundPeg RoundPeg;
public pegadapter(roundpeg peg)(this.roundpeg = peg;)
public void insert(string str){roundpeg.insertintohole(str);}
}
上記のコードでは、RoundPegはAdapteeに属し、アダプターです。 Pegadapterはアダプターで、適応順(アダプターRoundPeg)とターゲット(ターゲットSquarepeg)です。実際、これは組成方法と継承方法の包括的なアプリケーションです。
Pegadapterは最初にSquarepegを継承し、次に新しいものの組み合わせを使用してオブジェクトメソッドを生成し、RoundPegのRoundPegオブジェクトを生成し、次に親クラスINSERT()メソッドをオーバーロードします。ここからは、新しいオブジェクトを生成するために拡張性を使用してオブジェクトを生成するか、またはその内部構造とソースコードを知る必要はありません。
Javaの使用の経験がある場合、このパターンがよく使用されることがわかりました。
さらに使用します
上記のペガダプターは、両側から継承する必要がある場合、つまり、squarepegを継承してroundpegを継承します。
コードコピーは次のとおりです。
パブリックインターフェイスiroundpeg {
public void InsertIntoHole(String MSG);
}
パブリックインターフェイスisquarepeg {
public void insert(string str);
}
以下は、新しいroundpegとSquarepegです。
コードコピーは次のとおりです。
パブリッククラスのSquarepegはisquarepegを実装しています{
public void insert(string str){
system.out.println( "squarepeg insert():"+str);
}
}
パブリッククラスのラウンドペグはiroundpegを実装しています{
public void insertintohole(string msg){
System.out.println( "RoundPeg InsertIntoHole():"+msg);
}
}
これは、双方向アダプターと呼ばれる新しいペガダプターです。
コードコピーは次のとおりです。
パブリッククラスのペガダプターはiroundpeg、isquarepegを実装しています{
プライベートRoundPeg RoundPeg;
プライベートSquarepeg Squarepeg;
//構築方法
public pegadapter(roundpeg peg){this.roundpeg = peg;}
//構築方法
public pegadapter(squarepeg peg)(this.squarepeg = peg;)
public void insert(string str){roundpeg.insertintohole(str);}
}
また、プラグ可能なアダプターと呼ばれるタイプがあり、複数のアダプターのいずれかを動的に取得できます。リフレクションテクノロジーを使用して、クラスでパブリックメソッドを動的に発見できます。