用Java实现一个类

时间:2011-10-09 06:48:21

标签: java interface

我正在尝试编写驾驶模拟程序,我需要一些设计方面的帮助。我有一个名为RoadObjects的界面,现在包含车辆和哺乳动物。我需要实施不同类型的汽车,如卡车,轿车,半成品。他们有一些共同的方法和一些独特的方法。稍后,我会添加其他种类的车辆和哺乳动物。我不想使用继承,我试图根据设计原则和模式,如开放原则和工厂来做到这一点。现在我的问题是,我应该这样设计:

RoadObject interface

Vehicle extends RoadObject

Mammal extends RoadObject

SedanImpl implements Vehicle

TruckImpl implements Vehicle

People implements Mammal

...

...

或者我应该没有车辆和人员界面并且这样做?

RoadObject interface

SedanImpl implements RoadObject

TruckImpl implements RoadObject

People implements RoadObject

新问题: 我想使用工厂模式,例如选择哪种车辆。所以我制作了一个VechicleImpl和VechicleImplFactory,所以看起来像这样:

RoadObject interface

Vehicle extends RoadObject

VehicleImpl implements Vehicle

Mammal extends RoadObject

SedanImpl implements Vehicle

TruckImpl implements Vehicle

People implements Mammal

这种糟糕的设计吗?因为VehicleImpl会有很多重复的SedanImpl,TruckImpl等方法。或者如果我想拥有一个createVehicle的工厂,那么它应该在哪里?

3 个答案:

答案 0 :(得分:0)

有些合理:

- public interface IRoadObject

- public class People implements IRoadObject

- public class Vehicle

- public class Truck extends Vehicle implements IRoadObject

- public class Sedan extends Vehicle implements IRoadObject

但是,它仍然取决于要求。没有明确的要求,我想这很简单。

答案 1 :(得分:0)

我认为车辆和车辆人是个好主意。我会为此使用抽象类。

还要考虑行为。校车有一些不同于摩托车的行为,您可以通过接口实现这些行为。

查看around here了解更多想法。

答案 2 :(得分:0)

这两种方法都是有效的,无论您是否需要明确的车辆抽象取决于您的要求。 SedanImplTruckImpl等可能会分享车辆常见但与人类/动物无关的一些功能:

public interface Vehcile extends RoadObject
    getTires()
    getEngine()

正如您在Java中标记的那样,常见abstract类也可能有用:

public abstract class AbstractVehicle implements Vehicle {
    private Integer tires = 4;

    public Integer getTires() { return this.tires; }

    /* ... */
}

因此TruckImpl可以继承AbstractVehicle

public class TruckImpl extends AbstractVehicle {
    /* ... */
}