У меня есть вопрос. Мне нужно создать небольшую вещь, связанную с продуктами. Теперь я могу сказать 7 разных типов продуктов. Некоторые из них являются подтипами других, например
Cars - Vans - petrol - diesel - City - Hatchback - Saloon - Estate - petrol - diesel
Теперь, ради аргумента, все мои автомобили City, Hatchback и Saloon являются гибридными / газовыми / независимо, и я не планирую продавать бензин и дизельные. Однако есть вероятность, что в будущем у меня могут быть автомобили с бензиновым и дизельным салоном, но это не значит, что у меня будет 20 продуктов. Если он будет расти, у меня будет, вероятно, еще 2-3 типа.
Из того, что я понимаю, Prototype Pattern
может быть хорошим здесь, потому что я смогу избежать дублирования между имуществом -> бензином и van -> бензином …, но опять же вагоны будут иметь разные характеристики, чем городские автомобили, например, максимальные размеры загрузки.
Я много читал о шаблонах проектирования, и одна вещь, которую я помню наверняка, – это не использовать шаблон, когда он вам не нужен. Теперь вопрос: мне это нужно?
Благодаря!
Образец декоратора, вероятно, наиболее прямолинейный, который можно использовать, и будет хорошим для расширения функциональности и / или характеристик конкретных объектов.
Вот некоторые легкие чтения: Head First Design Patterns – CH3 pdf
FYI, пара должна иметь для обучения и ссылки на образцы дизайна, независимо от вашего языка выбора:
1) Образцы первых образцов дизайна
2) Шаблоны для архитектуры корпоративных приложений
3) Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения
И сайты:
1) DoFactory
2) Шаблоны дизайна StackOverflow
Есть еще несколько, мне придется их выкопать.
Каждый тип автомобиля требует другого поведения? Бензиновый фургон отличается от дизельного автомобиля? Салон должен вести себя иначе, чем поместье?
Если я правильно понимаю, вам нужно что-то подобное
public enum FuelType { Petrol, Diesel } public class Car { public string Name {get;set;} public FuelType Fuel {get;set;} } public class Van:Car { } public class CityCar:Car { }
Если характеристики Van – это просто разные значения, чем автомобиль, вам не нужно подклассифицировать, вам нужно изменить только значение свойства. Например, Van должен иметь другие свойства или различную реализацию методов, подходящих для подкласса.