Если я правильно понимаю ваши рассуждения, ваш рынок продает SoldComputer
, которые классифицируются в соответствии с общим ComputerType
. Кроме того, ComputerType
предварительно определяет некоторые характеристики всех компьютеров этого типа.
Композиция на наследство
Во-первых, Computer
- это не ComputerType
. Но, глядя на свойства этих классов, кажется, что мой аргумент касается только вопроса именования, потому что ваш ComputerType
также может быть назван GenericComputer
, в этом случае это будет менее шокирующим.
Но ваш ComputerType
- это только малая часть проблемы. Потому что рано или поздно вы поймете, что у проданного компьютера также могут быть некоторые StorageType
(например, HDD, 1To), а может быть, также некоторые GraphicType
и многие другие настраиваемые параметры. А завтра у вас могут появиться компоненты нового типа, о которых вы даже не подозреваете (например, голографический проектор 2D / 3D), но которые принципиально не изменят способ описания и классификации SoldCompter
.
Вот почему вы должны предпочесть состав над наследованием : вы можете иметь связь с другими типами компонентов. Большим преимуществом вашего нынешнего подхода является то, что если пользователь решает расширить ОЗУ своей SoldComputer
, он / она может выбрать только соответствующий ComputerType
, и все в порядке.
Если вы перейдете к наследованию, SoldComputer
будет иметь CPU
и memory
: если пользователь изменит свое значение, это будет несовместимо с категоризацией. И, может быть, нет типа компьютера, соответствующего новой классификации ...
Альтернативный
Еще один способ взглянуть на проблему - это иметь класс Computer
со всеми полями, которые технически описывают компьютер (например, процессор, память, диск и т. Д.):
- набор типов компьютеров на рынке будет заполнен
Computer
, но заполнены только некоторые соответствующие поля.
- набор проданных компьютеров на рынке будет заполнен
Computer
, у которого есть какой-то владелец.
Создание нового Computer
для продажи может использовать шаблон проектирования прототипа . Но как только это будет сделано, между компьютером и прототипом уже не будет никакой связи.
В этом случае рынок больше не будет классифицироваться по типу компьютера. Поиск всегда будет динамическим (в конечном итоге инициализируется с использованием списка выбора прототипов.