[英]how to organise my abstraction?
我在课堂上有一组功能。 这些功能是一组最低的通用性。
为了能够执行此操作,我需要生成某些信息,但是该信息可以从我的班级从两条路线之一到达。
我将尝试总结一下我的情况。
可以说我有一个如下课程:
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个人
我目前有两个选择:
重载我的构造函数,以便我可以发送两辆自行车或一辆汽车,然后可以在我具有haveFun()
之前调用2个中间函数之一(例如,获取4个人的名字haveFun()
-这就是我的意思目前正在做。
将两个构造函数分成两个单独的类,并在第三个类中重复我的haveFun()
,这成为我另外两个类的对象。 我的问题是我的中间函数只有几行代码,我不想将它们放在单独的文件中! (我总是将类放在单独的文件中!)
请注意,在这两个类之外,甚至在onHoliday
,我都不需要我的haveFun()
(即,我没有机会在周末或晚上做一些haveFun()
! )。
我虽然有关于将haveFun()
放入接口的信息,但是只有一个方法的接口似乎有点不值钱! 即使那样,我仍然必须在两个类中都使用该方法-一个用于自行车,另一个用于汽车!
我曾经考虑过让onHoliday
类接受任何对象类型,但是我不希望有人不小心将小船onHoliday
我的onHoliday
类中(想象我不会游泳,因此不会发生)。
可能需要注意的是,我的onHoliday
类是包私有的,并且是最终的。 实际上,只能通过其他类中的其他“私有方法”来访问它,并且本身仅具有私有方法。
编辑1:
我确定有人会建议我在将数据发送到onHoliday()类的类中进行处理。 但是这个类(我们称其为travel())没有理由关心我正在使用的白色类型的车辆。如果这样做,那么我确实将问题移到了树的另一端。 现在,必须重写我的所有中级课程,以访问汽车或自行车,因为他们现在只接受一个带有布尔开关的车辆对象,该对象可以确定它是自行车还是汽车。
编辑2:
不过,我还有另一个要讲的是运行一个抽象类来运行我的乐趣,然后在我的自行车或汽车类中将其实现为“内部类”。 然后,我可以访问我的自行车或班级的成员。 这也有意义吗?
注意:我可能应该提到,我必须确保在onHoliday()中至少要有4个人。
也许另一种思考方式是...
我可以获得一个多页文件,并从传递的页码列表中提取所需的页面。 或者,我可以获得多个文件的列表。
在第一种情况下,我发送一个文件对象,在第二种情况下,选择页码发送多个文件对象(预先选择我感兴趣的文件对象)。
实际上,这可能是一个更好的描述
您的代码示例有很多编译问题,但是我想我知道您的要求。 如果您有一个抽象类Vehicle
,则可以在具体类(例如Bike
, Car
haveFun()
中实现haveFun()
。Holiday类的构造函数可以采用Vehicle
参数。无论它是哪种类型的车辆,实现都在Holiday之外-而不是作为车辆的一部分。
您确实说过,尽管乐趣与车辆之间是松散的耦合。 如果它没有意义的实现在车辆haveFun,那么就在假日的方法,确定它-负此方法虽然是你必须检查每个车的你(即if vehicle instanceof Bike then... else if....
)
如果您选择后者,则可以在构造器中进行任何操作。 您可能想要一个说add的人员和车辆的方法addPerson(Vehicle)
。 然后,在添加完所有内容后,运行isFun()。
我可能会提出第三种方法:创建一个可以处理人员移动的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
类中并覆盖。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.