首页 > 解决方案 > 当接口实现的方法比接口多时,依赖倒置原则会失效?

问题描述

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

在下面的示例中,如果我有一个名为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()在不添加界面或为 Birds 创建新界面的情况下完成此操作?

标签: javasolid-principles

解决方案


怎么样:

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

推荐阅读