Мост или заводской рисунок? - PullRequest
1 голос
/ 29 марта 2012

В своем дизайне я впервые проектировал фабричный шаблон. Но один человек рекомендует лучше использовать схему моста.

Это мой сценарий: Как улучшить мой абстрактный шаблон фабрики?

Я просто хочу знать, какой шаблон лучше всего подходит для этого сценария ... Я запутался!

Резюме моего сценария:

Представьте себе черный ящик, этот черный ящик получает объект под названием Configuration и он выводит Problem объект

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

Кроме того, на моем заводе необходимо получить входное значение в конструктор, а также может изменить экземпляр .. так что эта часть является cruxial.

Я не очень хорошо знаю этот паттерн, поэтому я просто хочу использовать этот короткий сценарий, что мне делать?

Ответы [ 3 ]

2 голосов
/ 29 марта 2012

Технически это не имеет большого значения, и я не думаю, что ваша архитектура выиграет от перехода на мост. И вот почему:

Мост полезен, когда ваша иерархия имеет две различные степени свободы - кажется, что у вас есть: первая проблема, а вторая конфигурация.

В мосте вы извлекаете одну иерархию и внедряете ее в другую. Например, у вас есть абстрактный класс Problem с собственной иерархией (ProblemA, VeryDifficultProblem), и вы внедряете реализацию из другой иерархии (ConcreteConfiguration1 и т. Д.)

Здесь важно две иерархии . Если ваша проблема не формирует иерархии классов, а вы хотите указать контракты с интерфейсами (чтобы реализации классов могли происходить из разных поддеревьев иерархии), тогда Bridge будет неестественным, и я буду придерживаться Factory. И я не думаю, что Bridge имеет большой смысл при реализации его с помощью интерфейсов, а не абстрактных классов.

2 голосов
/ 29 марта 2012

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

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

Пожалуйста, помните, что вы можете использовать столько паттернов одновременно, сколько хотите, также в этих ситуациях вам не нужно выбирать между ними.Используйте то, что вы считаете наиболее эффективным.

0 голосов
/ 29 марта 2012

Вы можете использовать параметризованный фабричный шаблон, я не уверен, что Bridge предназначен для решения вашей проблемы.

interface IFactory<TConfiguration,TProblem> 
          where TProblem: IProblem
          where TConfiguration: IConfiguration
{
   TProblem Create(TConfiguration config);
}

class Factory<TConfiguration,TProblem>: IFactory<TConfiguration,TProblem>
          where TProblem: IProblem
          where TConfiguration: IConfiguration
{
   TProblem Create(TConfiguration config)
   {
       var problem = new Problem(config);
       ...
       return problem;
   }
}

Примечание: код, написанный в блокноте, может не скомпилироваться, но я надеюсь, что идеяясно

...