我在课堂上有一组功能。这些功能是一组最低的共性。
为了能够运行这个,我需要生成某些信息,但是这个信息可以从我的班级来自两条路线之一。
我会试着总结一下我的情况......
让我们说我有一个课程如下:
public class onHoliday(){
private Object modeOfTravel;
private Object location;
public onHoliday(Object vehicle, Location GPScoords) {
}
private boolean haveFun() {
//function to have fun, needs 4 people
}
}
让我们想象一下,我可以开车或骑车去度假。
我的haveFun()
功能取决于我的车辆类型。
但只是松散地。我有另一个函数来确定我的车辆类型,并提取所需的值。例如,如果我发送汽车,我可以一次性获得4个人,但如果我发送自行车,我需要至少2个才能获得所需的4个
我目前有两种选择:
重载我的构造函数,因为我可以将两辆自行车或一辆汽车送入其中,然后我可以调用两个中间函数中的一个(例如,获取我的4个人的名字){{{ 1}} - 这就是我目前正在做的事情。
将两个构造函数拆分为两个独立的类,并在第三个类中重复我的haveFun()
,这将成为我的另外两个类的对象。我的问题是我的中间函数只是几行代码,我不想把它们放在一个单独的文件中! (我总是将课程放在单独的文件中!)
请注意,我的haveFun()
不是我在这两个课程之外需要的东西,甚至不是haveFun()
(即我没有机会做onHoliday
haveFun()
1}}一个周末或一个晚上!)。
我有把haveFun()
放到接口中,但是只有一个方法的接口看起来有点毫无价值!即使这样,我也必须在两个类中使用该方法 - 一个用于自行车,另一个用于汽车!
我曾考虑让我的onHoliday
班级接受任何对象类型,但我不希望有人不小心将船送到我的onHoliday
班级(想象我不能游泳,所以它不会发生。)
值得注意的是,我的onHoliday
类是包私有,最后是。它实际上只能通过其他类中的其他“私有方法”访问,并且本身只有私有方法。
EDIT1:
我确信有人会建议我在将数据发送到onHoliday()类的类中处理它。但是这个类(让我们称之为travel())没有理由关心我正在使用的whay类型的车辆,如果我这样做它确实关心,我只是将问题移到了树的另一个地方。现在必须重新编写我的所有中间类来访问汽车或自行车,目前他们只是接受一个车辆对象,它有一个布尔开关来确定它是自行车还是汽车。
EDIT2:
我还有另外一个关于运行我的乐趣的抽象课程,然后在我的自行车或汽车课程中将其作为“内部课程”实施。然后我可以访问我的自行车或班级的成员。这也有意义吗?
注意:我应该提一下,我必须在我的onHoliday()clas中确保我至少有4个人。
考虑它可能是另一种方式......
我可以获得一个多页面文件,并从传递的页码列表中提取我需要的页面。 或者我可以获得多个文件的列表。
在第一种情况下,我发送一个文件对象,并选择页码 在第二个我发送多个文件对象(预先选择我感兴趣的对象)。
事实上,这可能是一个更好的描述
答案 0 :(得分:1)
你的代码示例有很多编译问题,但我想我知道你在问什么。如果您有一个抽象类Vehicle
,则可以在具体类中实现haveFun()
(即Bike
,Car
。您的Holiday类构造函数可以使用Vehicle
参数。无论它是什么类型的车辆,实施都在假日之外 - 而不是作为车辆的一部分。
你确实说它虽然是有趣的和车辆之间的松耦合。如果在Vehicle中实现hasFun没有意义,那么在Holiday中只有一个方法来确定它 - 这个方法的负面因素是你必须检查你拥有的每种类型的车辆(即{{ 1}})
如果你选择后者,你可以在构造函数中做任何事情。你想要一个方法,说添加人和车辆...... if vehicle instanceof Bike then... else if....
。然后在添加完所有后运行isFun()。
答案 1 :(得分:0)
我可能会提出第三种方法:创建一个Vehicle
类来处理移动的人。
public abstract class Vehicle {
public void travel(Location location) {}
public abstract int getCapacity();
//etc.
}
public class Bicycle extends Vehicle {
@Override
public int getCapacity() { return 2; }
}
public class Car extends Vehicle {
@Override
public int getCapacity() { return 4; }
}
final class onHoliday {
private Vehicle vehicle;
public onHoliday(Vehicle vehicle) {
this.vehicle = vehicle;
haveFun();
}
}
然后,如果你有任何Car
和Bike
会做出不同的事情(但他们都会这样做),只需将它们抽象为Vehicle
类并覆盖