Проектирование класса "Рубашка" в объектно-ориентированном виде
Я обсуждал проблему дизайна упражнений с моим другом, и мы нашли другое решение. Мы изучаем концепцию OOPS, поэтому решили показать наше решение здесь экспертам и узнать их мнение.
Задача: Дизайн класса для рубашек. Рубашки имеют разные особенности, такие как рисунок, размер, цвет и т. Д.
Решение друга:
Мое решение:
Там будут конкретные реализации, например, маленький, средний, большой для размера. Красный, синий, желтый для цвета. Разве использование интерфейсов для Pattern, Size, Color не является излишним? Полиморфизм должен использоваться для инкапсуляции поведения, но я использую его по-другому.
Может, какой-нибудь эксперт, пожалуйста, расскажет нам, как мы должны держать различные особенности рубашки в объектно-ориентированном виде? Как обрабатывать новые функции (например, оттенки), если они входят?
1 ответ
Идея вашего друга проста, и мне нравится начинать с простых идей и улучшать их по мере необходимости. С другой стороны, ваше решение обеспечивает большую гибкость, и вы довели ООП до максимума, используя тип интерфейса для каждой переменной вместо собственных типов.
Что касается последней вещи, которую вы упомянули при работе с новыми функциями, то хорошо, что в обоих проектах вы должны открыть класс для модификации, что не очень хорошо, так как это нарушает принцип OCP (классы должны быть открытым расширением, закрытым для модификации).
Я бы решил это, позволив Shirt
класс содержит свойства, которые являются общими для всех рубашек, таких как размер, цвет, цена или что-то еще, и хранит остальные функции, которые могут варьироваться в зависимости от HashMap
или PropertyList
,
Это дает большую гибкость, как при появлении новых функций, вы просто вызываете метод, подобный AddFeature(name, value)
который хранит функцию в HashMap
,
Я хочу прояснить один момент, не углубляться в дизайн и позволить ему тратить ваше время. Вместо этого начните с простых идей и улучшайте их по мере продвижения. Отличный дизайн основан на опыте и тщательном анализе сферы бизнеса.