这个适配器模式示例是否满足GOF定义?

时间:2013-05-15 17:17:08

标签: design-patterns

我需要知道这个例子是否符合适配器模式的意图。

此示例旨在满足可插拔适配器模式,但它适应两个接口:

interface ITargetOld {
    double Precise(double i);
}

interface ITargetNew {
    string RoundEstimate(int i);
} 

public class Adapter : ITargetOld, ITargetNew {
    public double Precise(double i) {
        return i / 3;
    }

    public string RoundEstimate(int i) {
        return Math.Round(Precise(i)).ToString();
    }

    public string NewPrecise(int i) {
        return Precise(Convert.ToInt64(i)).ToString();
    }
}

客户将是:

class Program {
    static void Main(string[] args) {
        ITargetOld adapter1 = new Adapter();
        Console.WriteLine("Old division format (Precise) " + adapter1.Precise(5));

        ITargetNew adapter2 = new Adapter();
        Console.WriteLine("New division format (Round Estimate) " + adapter2.RoundEstimate(5));

        Adapter adapter3 = new Adapter();
        Console.WriteLine("New Precise format " + adapter3.NewPrecise(5));

        Console.ReadKey();
    }
}

圣拉斐尔

1 个答案:

答案 0 :(得分:1)

对我来说,你的代码并不是真正的适配器。适配器模式描述了具有类型A的对象并希望在需要类型B的代码中使用它的情况。

interface A {
    method doSmthA();
}

interface B {
    method doSmthB();
}

class AdapterAToB implements B{
    private A a;
    constructor AdapterAToB(A a) {
         this.a = a;
    }

    method doSmthB() {
         a.doSomthA();
    }
}

在上述情况下,您将类型A的对象转换为接口B,并可以在需要B实例的位置使用它。