Использовать шаблон прототипа или нет

У меня есть вопрос. Мне нужно создать небольшую вещь, связанную с продуктами. Теперь я могу назвать 7 различных видов продукции. Некоторые являются подтипами других, например

Cars
 - Vans
   - petrol
   - diesel
 - City
 - Hatchback
 - Saloon
 - Estate
   - petrol
   - diesel

Теперь, ради аргументации, все мои автомобили City, Hatchback и Saloon гибридные / бензиновые / что угодно, и я не планирую продавать бензиновые и дизельные автомобили. Однако есть вероятность, что когда-нибудь в будущем у меня появятся бензиновые и дизельные седаны, но это не значит, что у меня будет 20+ видов продукции. Если он будет расти, у меня, наверное, будет еще 2-3 типа.

Насколько я понимаю, Prototype Pattern может быть здесь хорошим, потому что я смогу избежать дублирования между универсалом-> бензином и фургоном-> бензином ... но опять же, у автомобилей Van будут другие характеристики, чем, скажем, городской автомобиль, например. максимальные габариты загрузки.

Я много читал о шаблонах проектирования и одну вещь я точно помню - это не использовать шаблон, когда он вам не нужен. Теперь вопрос - а мне это нужно?

Спасибо!


person RandomWhiteTrash    schedule 28.10.2011    source источник


Ответы (2)


Шаблон декоратора, вероятно, является наиболее простым в использовании и может быть хорошим вариантом для расширения функциональности и / или характеристик конкретных объектов.

Вот небольшое чтение: Head First Design Выкройки - CH3 pdf

К вашему сведению, пара должна иметь что-то для изучения и обращения к шаблонам дизайна, независимо от того, какой язык вы выберете:

1) Head First Design Patterns

2) Шаблоны для предприятий Архитектура приложения

3) Шаблоны проектирования: элементы объектно-ориентированного программного обеспечения многократного использования

И сайты:

1) DoFactory

2) StackOverflow Design Patterns Newbie

Есть еще несколько, придется их откопать.

person Jeff Willener    schedule 28.10.2011
comment
Спасибо за ваш ответ, однако я не хочу расширять функциональность объекта, поскольку он будет в значительной степени настраиваться во время выполнения, но я хочу моделировать классы таким образом, который будет отличаться от прямого наследования. - person RandomWhiteTrash; 28.10.2011
comment
Несмотря на это, я принимаю этот ответ, потому что в нем есть хорошие ссылки на ценные ресурсы :) - person RandomWhiteTrash; 31.10.2011

Требует ли каждый тип автомобиля разного поведения? Бензиновый фургон отличается от дизельного фургона? Салон должен вести себя иначе, чем универсал?

Если я правильно понял, нужно что-то подобное

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 должен иметь другие свойства или другую реализацию методов, чтобы иметь право на создание подклассов.

person MikeSW    schedule 28.10.2011