在Java中实现一个类
问题描述:
我想写一个驾驶模拟程序,我需要一些关于设计的帮助。我有一个名为RoadObjects的界面,它现在包含车辆和哺乳动物。我需要实施不同类型的汽车,如卡车,轿车,半导体。他们有一些共同的方法和一些独特的方法。稍后,我会添加其他种类的车辆和哺乳动物。我不想使用继承,我试图根据设计原则和模式(如开放原则和工厂模式)来实现这一点。现在的问题是,我应该设计这样的:在Java中实现一个类
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等的重复方法。或者如果我想要一个创建车辆的工厂,应该在哪里?
答
两种方法都是有效的,无论您是否需要车辆的显式抽象取决于您的要求。 SedanImpl
,TruckImpl
等可能都有一些共同的车辆,但不虎门功能/动物:
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 {
/* ... */
}
答
合理的东西:
- 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
但是,它仍然取决于需求。没有明确的要求,我想这很简单。
建模'Truck'和'Sedan'可能不会需要额外的类所有,所以如果您可以将'Truck'和'Sedan'所需的信息映射到您的'VehicleImpl',那么拥有一辆'VehicleImpl'可以满足您的所有要求。 – home
@Home,但theres的所特有的卡车和轿车 – Dan
真的方法问题,告诉我:-) – home