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

这看起来就像多态性和组合。适配器的想法是一个“包装器”,它分派给一些底层对象。拥有适配器的目的是允许现有代码符合特定接口。

我经常看到的一个例子是,我有一个我编写的形状库,并且我有以下界面。

 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));

所以现在我可以使用现有的代码作为一个形状——也就是说,我对其进行了调整。我在您的示例代码中没有看到同样的想法。也许,如果您使用实际的具体想法,它会更清楚。

于 2012-08-21T18:33:13.703 回答