Реализация класса в Java - PullRequest
       1

Реализация класса в Java

1 голос
/ 09 октября 2011

Я пытаюсь написать программу симуляции вождения, и мне нужна помощь в разработке. У меня есть интерфейс под названием 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 и т. Д. Или, если бы я хотел иметь фабрику, создающую метод, где это должно быть?

Ответы [ 3 ]

0 голосов
/ 09 октября 2011

Я думаю, что автомобиль и люди - хорошая идея. Я бы использовал абстрактные классы для этого.

Также подумайте о поведении. Школьный автобус ведет себя не так, как мотоцикл, и вы можете реализовать его с помощью интерфейсов.

Посмотрите здесь , чтобы найти еще несколько идей.

0 голосов
/ 09 октября 2011

Оба подхода действительны, в зависимости от ваших требований, нужна ли вам явная абстракция для транспортных средств. 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 {
    /* ... */
}
0 голосов
/ 09 октября 2011

Что-то разумное:

- 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

Однако, это все еще зависит от требований. Без четких требований, как у вас, я думаю, это достаточно просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...