Я пытаюсь классифицировать транспортные средства, но я не уверен, что это лучший способ сделать это.Как классифицировать транспортные средства - наследование против интерфейсов
Почему я смущен? Если вы думаете об этом, транспортные средства могут быть разделены по категориям:
1) Тип транспортного средства: Land Vehicle, WaterCrafts & AirCrafts. 2) Другой способ категоризации: Приведенные в действие транспортные средства и немобильные транспортные средства, такие как Трактор (без питания и только что прикрепленный к грузовику), грузовик и т. Д. 3) Загрузка кузова: транспортное средство может быть загружено или нет.
Позвольте мне привести пример: Транспортное средство -> Транспортное средство -> Приводное/неэлектрическое -> Нагрузочное/NonLoadable.
Если вы видите, я создаю много подклассов, но какое использование этого, кроме различия свойств, является загружаемым или нет. Я могу это сделать и с помощью интерфейсов. Реализует интерфейсы Loadable® с питанием, которые позволяют загружать.
Например: автомобиля -> LandVehicle -> Трактор LandVehicle будет реализовывать интерфейсы, такие как isPowered и isLoadable, которые будут перекрываться трактора в качестве ложных и истинных соответственно.
Я знаю, что Наследование предназначено для отношений «isa» и интерфейсов для «может делать», но как это имеет здесь значение, потому что оно может использоваться взаимозаменяемо.
Каков наилучший способ решения таких проблем.
Лучший способ решить эти проблемы - использовать * состав *, а не * наследование *. Кто-то может написать ответ на ваш конкретный вопрос, но посмотрите: http://stackoverflow.com/questions/49002/prefer-composition-over-inheritance –
Спасибо WW. Я не думаю, что композиция может помочь мне здесь или мне нужно снова подумать, если это действительно помогает. – user3089214
Несколько атрибутов + несколько комбинаций атрибутов == Декоратор Pattern. – dbugger