我已经提出了两种不同的方法来实现我班上的一些方法:
class Zoo {
public void addTiger(Tiger tiger);
public void addEmu(Emu emu);
// ...
}
class Zoo {
public void add(Tiger tiger);
public void add(Emu emu);
}
我能看到的两者之间的唯一区别是冗长 - 但我错过了一些更基本的东西吗?一种方法将来会让事情变得更加困难吗?
答案 0 :(得分:4)
添加Tiger和添加Emu有什么区别?为什么不制作一个Animal界面?
我会做类似的事情:
class Tiger implements Animal { }
class Emu implements Animal { }
class Zoo {
void add(Animal animal) { }
}
Zoo zoo = new Zoo();
zoo.add(new Tiger());
zoo.add(new Emu());
但是你的两种方法不会有很大的不同,因为违反了SOLID原则,它们同样是对或错的。
答案 1 :(得分:1)
如果将来您决定合并Emu和Tiger,使它们实现相同的接口或扩展相同的类,并因此合并这两种方法,使用
class Zoo {
public void add(Tiger tiger);
public void add(Emu emu);
}
将减轻您的工作,因为您不需要在使用您的方法的地方更改任何内容 所以,是的,第一种方法可能会在未来使某些事情变得更加困难。
答案 2 :(得分:0)
基于您正在使用的上下文。
在这种背景下,Tiger和Emu都是Animal。我更喜欢使用重载方法,它会有意义。而且,如果Tiger和Emu都继承自Animal类。你可以声明一个动物数组:
Animal[] zoo;
这个动物园都包含Tiger和Emu。你可以这样做:
for (int i = 0; i < zoo.length; i++) {
BigZoo.add(zoo[i]);
}
在OOP中,我们说这是多态性。
但是,如果那些东西是两个不同的含义。例如,服务器有两件事需要添加:User
和Data
。这很有道理:
addUser(User user);
addData(Data data);
而不是:
add(User user);
add(Data data);
希望这可以帮助你:)