1

私がコーディングしているシナリオがあり、アダプターパターンが役立つと感じています。好きなときに切り替えたい複数の可能なプロバイダーを持つサービスがあるため、各「アダプター」が同じルール (インターフェース) に従う限り、基になるコードは呼び出し元から隠されます。

これを念頭に置いて、私は多くの例を見てきました。 このコード スニペットは、このスタック オーバーフローの例から抜粋したものです

Interface ITarget
{
  public void GetData();
}

//Decision to use MSDAO
class AdaptorMS : ITarget
{
  public void GetData()
  {
    MSDAO objmsdao = new MSDAO();
    objmsdao.GetDataMethod();
  }
}

// calling code
class Client
{
  static void Main(string[] args)
  {
    ITarget objAdaptor = new AdaptorMS();
    object dummyObject = objAdaptor.GetData();
  }
}

次に、変更する新しいアダプターを作成することにします。

//After a month, the decision to use OracaleDAO was taken, so create a new adapter
class AdaptorOracle: ITarget
{
  public void GetData()
  {
    OracleDAO objrracledao = new OracleDAO();
    objoracledao.GetSomeData();
  }
}

// Calling code
class Client
{
  static void Main(string[] args)
  {
    ITarget objAdaptor = new AdaptorOracle();
    object dummyObject = objAdaptor.GetData();
  }
}

私はこの例も見ました:

public class AdaptorA : ITarget
{
     private TargetA A { get; set; }

     public AdaptorA( TargetA a )
     {
           this.A = a;
     }

     public void GetData() { 
          return this.A.SomeGetDataCall(); 
     }
}

public class AdaptorB : ITarget
{
     private TargetB B { get; set; }

     public AdaptorB( TargetB a )
     {
           this.B = a;
     }

     public void GetData() { 
          this.B.MakeDataCall(); 
     }
}

2 つの新しいアダプターがありますが、上記の例について理解できないのは、アダプター クラスが呼び出す基になるシステム (TargetA または TargetB) のパラメーターを受け取るという事実です。2 つの例の違いは何ですか? 呼び出しコードからすべての実装を非表示にする最初の例 (OracleDAO のインスタンスはアダプター内にあります) を取得しますが、2 番目の例は取得しません。根本的な違いはありますか、それともパターンを誤解していますか?

アドバイスをよろしくお願いします!

4

1 に答える 1