我想知道如何在不破坏依赖性反转原则的情况下调用类中的方法?
在下面的例子中,如果我有一个名为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()
或为鸟类创建新界面,我该如何做到这一点?
答案 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);
}
}