0

クラスがあり、別のクラスを呼び出します。お気に入り:

class Caller
{
    public void LetsCall()
    {
        abstractA a = new ConcreteA();
        a.DoSomething();
    }

}
public abstract class abstractA
{
    public virtual void DoSomething()
    {
    }

}

class ConcreteA : abstractA
{
    public override void DoSomething()
    {
        base.DoSomething();
        Functions.Doit();
    }
}

class Functions
{
    public static void Doit()
    {
        //Some more work
    }
}

ここで「ConcreteA」クラスがアダプターであり、関数クラスがアダプティーであることを知りたいですか?

アダプターの特性を説明できる人はいますか? アダプティーでメソッドを呼び出すメソッド以外に、他のメソッドを用意してもよろしいでしょうか。
ありがとうございました、

4

1 に答える 1

0

これはポリモーフィズムとコンポジションのように見えます。アダプターの考え方は、基になるオブジェクトにディスパッチする「ラッパー」です。アダプターを持つポイントは、既存のコードが特定のインターフェースに準拠できるようにすることです。

私がいつも目にする 1 つの例は、私が作成したシェイプ ライブラリがあり、次のインターフェイスがあるとします。

 public interface Shape {
    double getArea();
 }

別のライブラリでクールな Circle 実装を見つけたので、それを自分のシステムで使用したいのですが、getArea() メソッドがありません。ここにあります:

public class SomeonesCircle {
   public double getRadius() { return radius; }
}

したがって、システムで「形状」にするために、アダプターを導入できます。

public class CircleAdapter implements Shape {

   private final SomeonesCircle theCircle;

   public CircleAdapter (SomeonesCircle theCircle) { this.theCircle = theCircle; }

   public double getArea() {
     return theCircle.getRadius() * theCircle.getRadius() * Math.PI;
   }
}

// Somewhere else I can now do
Shape shape = new CircleAdapter(new SomeonesCircle(radius));

これで、既存のコードを Shape として使用できるようになりました。つまり、それを適応させました。あなたのサンプルコードには、これと同じ考えはありません。おそらく、実際の具体的なアイデアを使用すると、より明確になるでしょう。

于 2012-08-21T18:33:13.703 に答える