Шаблон проектирования для установки определенных полей в объекте на основе значений перечисления - PullRequest
0 голосов
/ 22 апреля 2020

Итак, в основном я хочу заполнить / не заполнить определенные поля в объекте на основе списка перечислений.

Например, рассматриваемый объект:

case class Car(brand: String,
              model: String,
              wheels: Int,
              airbags: Boolean,
              seats: Int,
               cruiseControl: Boolean,
               photo: String,
               parkingAssist: Boolean)

Это является полным объектом, и в зависимости от списка типов перечисления Java я хочу установить определенные поля. Также возможны комбинации, и они могут перекрываться.

enum CarType {
  BASIC_CAR,
  LUXURY_CAR,
  SAFE_CAR,
  PICTURE_CAR
}

Поэтому, в основном, в зависимости от типа CarType, я хотел бы установить определенные поля Car. Например:

BASIC_CAR необходимо указать марку, модель, колеса и места.

LUXURY_CAR необходимо указать марку, модель, cruiseControl и parkingAssist

SAFE_CAR необходимо установить подушки безопасности

PICTURE_CAR необходимо установить parkingAssist

Так что я получу список этих перечислений, а затем необходимо создать объект. Например, у меня будет один объект с BASIC_CAR, LUXURY_CAR, SAFE_CAR, что означает, что у создаваемого мной объекта должны быть все поля, кроме parkingAssist.

Таким образом, в конце перечисления относятся к определенному полю и в основном к ( Сочетания) перечисления мне требуется установить определенные поля в объекте. Что было бы хорошим дизайном для этого?

1 Ответ

0 голосов
/ 22 апреля 2020

Я думаю, что вы должны использовать шаблон Decorator для решения этой проблемы. Проверьте этот веб-сайт, чтобы получить пример: https://sourcemaking.com/design_patterns/decorator

Я редактирую свой пост, чтобы он был более конкретным c, я имею в виду что-то вроде этого:

public interface Car {

    public void assemble();
}

public class BasicCar implements Car {

    @Override
    public void assemble() {
        //set basic car:  brand, model, wheels and seats.
    }

}

public class CarDecorator implements Car {

    protected Car car;

    public CarDecorator(Car c){
        this.car=c;
    }

    @Override
    public void assemble() {
        this.car.assemble();
    }

}

public class LuxuryCar extends CarDecorator {

    public LuxuryCar(Car c) {
        super(c);
    }

    @Override
    public void assemble(){
        super.assemble();
        //add especial fields for luxury car or override values from basic car
    }
}

и в зависимости от значения Enum вы можете создавать разные классы: new LuxuryCar (), new SportCar ()

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