Как называется этот шаблон заводского типа и как мне представить его в UML?

StackOverflow https://stackoverflow.com/questions/629997

  •  08-07-2019
  •  | 
  •  

Вопрос

Пример:У меня есть несколько типов, напримерКолесо, Тормоз, Двигатель, Сцепление, автобокс, ручной блок, Электрическое окно, датчик задней парковки, подогрев сидений.Все они будут наследовать интерфейс ICarPart marker (может быть атрибутом (java annotation), но на данном этапе это не имеет значения).

Затем я пишу свой класс Car, который может представлять все типы автомобилей, например

class Car
{
    string Name;
    DateTime creationDate;
    string ID;

    IList<ICarPart> parts;
}

Затем я пишу завод по созданию автомобилей.Завод может ссылаться на некоторый XML-файл, который представляет собой список ингредиентов для разных типов автомобилей.Например.(и, пожалуйста, игнорируйте формат, это просто для иллюстрации):

<ExpensiveCar>
  <Name>Expensive Car</Name>
  <Parts>
    <HeatedSeats/>
    <Wheel count=4/>
    <RearParkingSensor/>
    <ElectricWindow type=FrontAndBack/>
  </Parts>
</ExpensiveCar>

Фабрика проанализировала бы этот список ингредиентов и создала бы объект car.Новые типы автомобилей будут доступны системе при условии, что детали будут закодированы, а список ингредиентов составлен в формате XML.

Вопросы:

  1. Как называется этот паттерн?Или это просто сочетание нескольких шаблонов?
  2. Является ли что-нибудь из этого антипаттером?
  3. Как мне представить это в UML?Я мог бы составить диаграмму классов для деталей и для базового класса автомобиля.Как бы я показал экземпляры этого класса, которые поддерживаются в данный момент, и части, которые у них есть?

Заранее благодарю.Если что-то из этого неясно, пожалуйста, прокомментируйте, и я внесу изменения / udpate / предоставлю более подробную информацию.

Это было полезно?

Решение 3

  1. Как называется этот паттерн?Или это просто сочетание нескольких шаблонов?

Описанный паттерн - это Конструктор Шаблон.Шаблон builder создает сложные объекты из набора более простых частей.Иногда объекты, построенные с помощью шаблона builder, являются Составной Объекты (хотя и не обязательно в случае вопроса).

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

  1. Является ли что-нибудь из этого антипаттером?

НЕТ

  1. Как мне представить это в UML?

Вероятно , с помощью:

  1. Определите диаграмму классов, показывающую детали как классы, а также класс автомобиля.Покажите, что каждый класс part реализует интерфейс ICarPart.
  2. Возможно, на отдельной (но связанной) диаграмме классов покажите именованные экземпляры класса car, используя обозначение экземпляра UML.Представление класса экземпляра позволяет вам указать значения, которые имеют атрибуты в этом классе, например
------------------------------------------
|ExpensiveCar : Car                      |
------------------------------------------
|parts = {                               |  
|HeatedSeats,                            |
|Wheel (count = 4),                      |
|RearParkingSensor,                      |
|ElectricWindows (type = FrontAndBack) } |
------------------------------------------

Обратите внимание, что, поскольку это экземпляр, текст "ExpensiveCar :Автомобиль" должно быть подчеркнуто, но SO не позволяет мне этого сделать.

Обозначение, которое я использовал здесь для инициализации массива с частями, не очень подходит и, возможно, не самый лучший подход.Возможно, альтернативой было бы добавить заметку UML, содержащую фактический XML.Важно то, что клиент может видеть, из чего состоит дорогой автомобиль, так же как и программист.

Другие советы

Как называется этот паттерн?Или это просто сочетание нескольких шаблонов?

У вас есть заводской метод шаблон (создание объектов автомобиля) и старая добрая композиция (создание автомобиля из колеса, сиденья и т.д.).Последнее представляет собой вариацию композиции.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top