Я пишу программу, которая связана с греблей, и я создаю неизменный класс с именем «BoatType» для представления различных «типов» лодок, которые существуют. Это становится сложным, потому что есть много типов, которые требуют уникального описания.
BoatType должен иметь следующее:
- Тип SCULL или SWEEP
- Число, которое соответствует количеству людей, которые помещаются в лодку.
- Тип PORT или STARBOARD, но только если первый тип SWEEP
- Логическое значение, представляющее COXED или UNCOXED, как правило, только для SWEEP
Это еще более осложняется тем фактом, что в мире гребли существуют только определенные комбинации этих полей. Мне бы хотелось, чтобы моя программа имела простой перечислимый доступ к этим стандартным типам без необходимости создавать новые объекты BoatType. Это в полном объеме:
SCULL 8
SCULL 4
SCULL 2
SCULL 1
SWEEP 8 ПОРТ COXED
SWEEP 8 STARBOARD COXED
SWEEP 4 ПОРТ COXED
ПОРТ SWEEP 4 UNCOXED
SWEEP 4 STARBOARD COXED
SWEEP 4 STARBOARD UNCOXED
SWEEP 2 ПОРТ COXED
SWEEP 2 ПОРТ UNCOXED
SWEEP 2 STARBOARD COXED
SWEEP 2 STARBOARD UNCOXED
В настоящее время это класс, который я написал на Java:
public class BoatType
{
public enum RiggerType{SCULL, SWEEP_PORT, SWEEP_STARBOARD}
private int numSeats;
private RiggerType riggerType;
public boolean coxswain = true;
public BoatType(RiggerType type, int seats, boolean coxed)
{
numSeats = seats;
riggerType = type;
coxswain = coxed;
}
}
с перечислением стандартных типов в другом месте:
public static final BoatType
SCULL_OCTUPLE = new BoatType(RiggerType.SCULL, 8, false),
SCULL_QUAD = new BoatType(RiggerType.SCULL, 4, false),
SCULL_DOUBLE = new BoatType(RiggerType.SCULL, 2, false),
SCULL_SINGLE = new BoatType(RiggerType.SCULL, 1, false),
SWEEP_PORT_EIGHT_COXED = new BoatType(RiggerType.SWEEP_PORT, 8, true),
SWEEP_STARBOARD_EIGHT_COXED = new BoatType(RiggerType.SWEEP_STARBOARD, 8, true),
SWEEP_PORT_FOUR_COXED = new BoatType(RiggerType.SWEEP_PORT, 4, true),
SWEEP_PORT_FOUR_UNCOXED = new BoatType(RiggerType.SWEEP_PORT, 4, false),
SWEEP_STARBOARD_FOUR_COXED = new BoatType(RiggerType.SWEEP_STARBOARD, 4, true),
SWEEP_STARBOARD_FOUR_UNCOXED = new BoatType(RiggerType.SWEEP_STARBOARD, 4, false),
SWEEP_PORT_PAIR_COXED = new BoatType(RiggerType.SWEEP_PORT, 2, true),
SWEEP_PORT_PAIR_UNCOXED = new BoatType(RiggerType.SWEEP_PORT, 2, false),
SWEEP_STARBOARD_PAIR_COXED = new BoatType(RiggerType.SWEEP_STARBOARD, 2, true),
SWEEP_STARBOARD_PAIR_UNCOXED = new BoatType(RiggerType.SWEEP_STARBOARD, 2, false);
В настоящее время это кажется довольно громоздким, поэтому мне было интересно, есть ли у кого-нибудь лучшая идея, как это представить. Перечисление не может быть и речи, потому что, хотя эти стандартные типы существуют, я не хочу ограничивать их этими комбинациями.