2014-02-15 5 views
-1

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

первого задание топлива формула Потребляемая следующая

result = time * fuel * 60; 

второго

result = (startPoint-endPoint)/speed * fuel; 

третий

result = (endPoint-startPoint)/speed * fuel; 

и ты четвёртая

result += movement/speed * fuel; 

кстати

movement = startpoint - endpoint or endpoint - startpoint 

и пользователь выбирает один или несколько миссий. и моя программа будет выполнять общее потребление топлива.

в зависимости от этих данных. как вы думаете, какой шаблон дизайна является наиболее подходящим?

ответ

-1

Автомобиль собирается в различные миссии ...

State design pattern будет вполне подходящим для того, что вы просите. В каждом состоянии вы кодируете разные способы поиска результата.

+0

_'State шаблон дизайна ...'_ Да, может быть ... подсостояниями может также играть роль , У вас есть примеры кода? –

+0

По крайней мере, я думаю, что это скорее связано с шаблоном стратегии, потому что состояние (топливо) на самом деле не определяет общее поведение «Vehicle», а «VehicleType»/'Mission'do (посмотрите на @liho) s ответ), но наоборот. –

0

... какой дизайн является наиболее подходящим?

Похоже, что модель Strategy будет достаточной для того, что вы пытаетесь сделать.

1
Факты:
  • Vehicle содержит информацию о fuel, speed, какой-то истории о его движении, и т.д.
  • вы определили 4 типа Mission
  • потребление fuel будет зависеть от типа Mission и состояния Vehicle
То, что я вижу, что вы можете:
  1. Воспользоваться полиморфизма ~> определяют общий class Mission, который предписывает интерфейс для конкретных типов миссий (реализованных как классы, полученные из Mission) или
  2. дают Mission элемент type, который будет использоваться при определении способ fuel будет потребляться

Первый из них «чувствует себя OO», второй «чувствует себя процедурный», так как вы, скорее всего, закончится с кодом типа:

switch (type) { 
    case ONE: ... 
    case TWO: ... 
    ... 
} 

, который также будет являться частью кода, который должен быть отредактирован, как только вы обнаружите, что вам нужно больше, чем просто 4 типов Mission ... Я бы сказал, что если вы выберете полиморфизм, в этом случае вы получите более чистый код.

Тогда вашим последним решением будет только то, как вы собираетесь «смешивать» Vehicle в контексте с Mission. Может быть, вы бы в конечном итоге с прохождением контекста Vehicle «s к Mission непосредственно, что-то вроде:

class Mission { 
public: 
    double getFuelConsumptionSpeedForVehicle(const Vehicle&); 
}; 

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

... просто начать с какой-то код и не потеть маленький материал слишком много;)

+0

+1 Я тоже не читал образцы кода;) ... Я думаю, что ваш ответ хорошо напоминает то, что я имел в виду с [Стратегией] (http://en.wikipedia.org/wiki/Strategy_pattern) (_'the way топливо будет потреблено ... »)! –

Смежные вопросы