"编程到接口而不是实现"是处理变革的重要设计原则。如何在适配器模式中实现此主体?

时间:2017-01-05 20:04:40

标签: oop user-interface design-patterns

但我不明白,有人可以帮我解释一下吗? "编程到接口而不是实现"是处理变革的重要设计原则。如何在适配器模式中实现此主体?

2 个答案:

答案 0 :(得分:2)

虽然你的问题不是100%正确,但我还是试着回答它。 “程序到接口不实现”是面向对象世界的根本原则。例如,而不是做

SpecialEmployee emp = new SpecialEmpoyee();

我们应该始终IEmployee emp = new SpecialEmployee();

以下是使用相同原理的适配器模式示例 -

interface IBird
    {
        public void fly();
        public void makeSound();
    }

class Sparrow : IBird
{
        public void fly()
        {
          // Print "Fly"
        }
        public void makeSound()
        {
          // Print "Sound"
        }
}

interface ToyDuck
{
    // toyducks dont fly they just make
    // squeaking sound
    public void squeak();
}

class PlasticToyDuck implements ToyDuck
{
    public void squeak()
    {
        //Print "Squeak"
    }
}

class BirdAdapter implements ToyDuck
{
    // You need to implement the interface your
    // client expects to use.
    // Instead of using implementation we are programming against interface 
    // here, by using IBird instead of "new Sparrow" or something like it.
    // Further, it is an example of constructor dependency injection where we are inserting dependency "IBird" through constructor. 
    IBird bird;
    public BirdAdapter(IBird bird)
    {
        // we need reference to the object we
        // are adapting
        this.bird = bird;
    }

    public void squeak()
    {
        // translate the methods appropriately
        bird.makeSound();
    }
}

答案 1 :(得分:0)

Adapter pattern允许现有类的接口可以从另一个接口使用,这意味着适配器将已存在的东西(Adaptee)适配到您想要的接口(Target)。

Target是一个接口,所以你可以有更多的实现,一个实现是Adapter,但你也可以有目标接口的其他实现,所以"编程到一个接口而不是一个实现"原则得以实现。