Проблема дизайна - PullRequest
       9

Проблема дизайна

0 голосов
/ 06 апреля 2009

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

Теперь я хочу реализовать LazyLoadedChannel, который может быть Channel или ChannelProxy. Расширение обоих невозможно. Какое хорошее решение для такой проблемы?

Я мог бы создать LazyLoadedChannel (расширение Channel) и LazyLoadedChannelProxy (расширение ChannelProxy), но это означает, что код будет дублироваться в обоих классах.

Ответы [ 3 ]

2 голосов
/ 06 апреля 2009

Patterns Decorator звучит для меня хорошим выбором.

В качестве альтернативы, однако, вы можете сделать это:

  1. Сделайте ваш Channel настраиваемым как ленивый или не ленивый. Вы можете использовать шаблон стратегии для достижения этой цели.
  2. Как только Channel настраивается таким образом, ChannelProxy, поскольку он является только подклассом, также должен автоматически настраиваться. Таким образом, вам, возможно, не придется больше ничего делать.
  3. Или : в зависимости от того, что подразумевает «загрузка», ChannelProxy может потребоваться предоставить собственный класс LoadingStrategy.
2 голосов
/ 06 апреля 2009

Похоже, Шаблон декоратора является опцией.

0 голосов
/ 06 апреля 2009

Как сказано выше (Дмитрий), он выглядит как декоратор, который вы поместили на свой канал. Предполагая, что ваш Прокси-сервер обращается к значениям только в случае необходимости, т.е. когда они собираются измениться.

...