当接口实现具有比接口更多的方法时,依赖性倒置原则会中断吗?

时间:2018-04-28 01:30:06

标签: java solid-principles

我想知道如何在不破坏依赖性反转原则的情况下调用类中的方法?

在下面的例子中,如果我有一个名为Animal的界面,如:

interface Animal {
     void walk();
}

,其实现如下:

public class Bird implements Animal{
     public void walk() {
          //Do Something
     }

     public void fly() {
         //Do Something
     }
}

我想执行fly()方法,我的代码目前看起来像破坏了依赖的反转原则。

public class Start {

  private Bird bird;

  @inject
  public Start(Bird bird) {
     this.bird = bird;
     this.bird.fly();     // THIS BREAKS DEPENDENCY INVERSION
  }

}

如果不在界面中添加fly()或为鸟类创建新界面,我该如何做到这一点?

1 个答案:

答案 0 :(得分:0)

怎么样:

interface IMovable {
    void move(int distance);
}

实现:

public class Bird implements IMovable {
    @override
    public void move(int distance) {
        if(distance > 5) {
            walk();
        } else {
            fly();
        }
    }

    public void walk() {
         //Do Something
    }

    public void fly() {
        //Do Something
    }
}

用法:

public class Start {

    private IMovable animal;

    @inject
    public Start(IMovable animal) {
       this.animal = animal;
       this.animal.move(100);
    }
}