繁体   English   中英

如何组织我的抽象?

[英]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个人

我目前有两个选择:

  1. 重载我的构造函数,以便我可以发送两辆自行车或一辆汽车,然后可以在我具有haveFun()之前调用2个中间函数之一(例如,获取4个人的名字haveFun() -这就是我的意思目前正在做。

  2. 将两个构造函数分成两个单独的类,并在第三个类中重复我的haveFun() ,这成为我另外两个类的对象。 我的问题是我的中间函数只有几行代码,我不想将它们放在单独的文件中! (我总是将类放在单独的文件中!)

请注意,在这两个类之外,甚至在onHoliday ,我都不需要我的haveFun() (即,我没有机会在周末或晚上做一些haveFun() ! )。

我虽然有关于将haveFun()放入接口的信息,但是只有一个方法的接口似乎有点不值钱! 即使那样,我仍然必须在两个类中都使用该方法-一个用于自行车,另一个用于汽车!

我曾经考虑过让onHoliday类接受任何对象类型,但是我不希望有人不小心将小船onHoliday我的onHoliday类中(想象我不会游泳,因此不会发生)。

可能需要注意的是,我的onHoliday类是包私有的,并且是最终的。 实际上,只能通过其他类中的其他“私有方法”来访问它,并且本身仅具有私有方法。

编辑1:

我确定有人会建议我在将数据发送到onHoliday()类的类中进行处理。 但是这个类(我们称其为travel())没有理由关心我正在使用的白色类型的车辆。如果这样做,那么我确实将问题移到了树的另一端。 现在,必须重写我的所有中级课程,以访问汽车或自行车,因为他们现在只接受一个带有布尔开关的车辆对象,该对象可以确定它是自行车还是汽车。

编辑2:

不过,我还有另一个要讲的是运行一个抽象类来运行我的乐趣,然后在我的自行车或汽车类中将其实现为“内部类”。 然后,我可以访问我的自行车或班级的成员。 这也有意义吗?

注意:我可能应该提到,我必须确保在onHoliday()中至少要有4个人。

也许另一种思考方式是...

我可以获得一个多页文件,并从传递的页码列表中提取所需的页面。 或者,我可以获得多个文件的列表。

在第一种情况下,我发送一个文件对象,在第二种情况下,选择页码发送多个文件对象(预先选择我感兴趣的文件对象)。

实际上,这可能是一个更好的描述

您的代码示例有很多编译问题,但是我想我知道您的要求。 如果您有一个抽象类Vehicle ,则可以在具体类(例如BikeCar 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();
    }
}

然后,如果您有任何事情要让CarBike做不同的事情(但是他们俩都会做),只需将它们抽象到Vehicle类中并覆盖。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM