шаблоны проектирования - PullRequest
1 голос
/ 22 апреля 2011

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

У меня есть существующий компонент, который контролирует производительность, скажем, n различных пакетов программного обеспечения, каждый из которых обслуживает определенный тип.т.е. существующий компонент

  • пакет A для типа 1
  • пакет B для типа 2
  • пакет C для типа 3 и т. д. ...

Каждый пакет выполняет некоторые наблюдения за производительностью и имеет свои собственные журналы данных, записи и т. Д. Каждый пакет имеет только один тип.

В будущем у нас может появиться новая функция для

  • включая журнал анализа.Он будет иметь журнал данных, который уже существует, и добавить к нему некоторые другие данные.
  • Поддержка нескольких типов для пакета.т. е. пакет A для типа 1, тип 2 (Bitype), пакет B для типа 1, тип 2, тип 3 (tritype)

Глядя на это, я подумал, что здесь может пригодиться шаблон адаптера.Я мог бы использовать существующий компонент в качестве адаптера.Затем выполните новые функции в классе адаптера.Моя цель будет заключительным компонентом с 2 добавленными функциями.

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

Может ли кто-то, кто имеет некоторый опыт работы с шаблонами проектирования, сделать ваши предложения здесь?Спасибо

Программное обеспечение для спортсменов.Существующая система отслеживает детали тренировок этих спортсменов.В нем есть такие данные, как журнал тренировок, какие бренды они предпочитают, личные данные и т. Д. Для отдельных спортсменов создан отдельный пакет.Типы спортсменов - теннисист, игрок в гольф, пловец и т. д. Таким образом, спортсмены могут быть только одного типа, либо игроком в теннис, либо игроком в гольф, но не обоими.В будущем будет необходимо включить дополнительные функции

  1. Чтобы включить журнал производительности (т.е. взять уже существующие журналы и добавить подробности журнала производительности поверх него).
  2. Интересы спортсменов могут совпадать, т. Е. Один спортсмен может участвовать в нескольких видах спорта.Один спортсмен мог участвовать в теннисе, золотом и плавании.

Надеюсь, теперь все ясно.

Ответы [ 2 ]

0 голосов
/ 07 августа 2015

Это похоже на хороший случай для шаблона Decorator.

У вас может быть абстрактный регистратор данных, из которого вы можете получить исходный пакет A, B, C и т. Д. Кроме того, вы должны создать «декоратор», представляющий собой абстрактный класс, производный от вашего базового регистратора данных, а также имеющий базовый регистратор данных в качестве члена.

Вы можете опираться на функциональность, предоставляемую этим регистратором данных участника, и представлять его как функциональность этого декоратора. (например, метод LogData AnalysisDecorator будет регистрировать некоторую информацию анализа в дополнение к данным, которые он регистрирует) Вы можете создать один декоратор для каждой функции, которую вы хотите добавить.

Теперь, если вы хотите добавить некоторые дополнительные функции в пакет A, вы можете обернуть его декоратором требуемой функциональности. Таким образом, вы можете использовать любые комбинации дополнительных функций в базовом пакете.

Надеюсь, это поможет!

0 голосов
/ 02 июля 2015

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

Ваше описание не очень понятно для меня, но я могу предложить вам взглянуть в направлении паттерна моста и попытаться сделать что-то вроде:

abstract class Sportsmen {
  ILogger logger;
  List<IPackage> packages;
  List<IInterest> interests;
}

interface IPackage {
  IList<ISomeType> SupportingTypes {get;set; }
}

Я бы порекомендовал вам отличный бесплатныйэлектронная книга о выкройках: http://gameprogrammingpatterns.com/

Удачи!

...