AbstractFactory Versus Bridge Pattern

Я только что узнал шаблон Bridge и его намерение: отмените абстракцию от его реализации, чтобы они могли варьироваться независимо.

Но почему бы не просто сделать AbstractFactory то же самое?

Я знаю, что AbstractFactory может создать конкретный мост, но мой вопрос касается использования AbstractFactory вместо Bridge для развязки абстракции и реализации.

Не могли бы вы объяснить мне реальную разницу между AbstractFactory и Bridge Шаблон?

Ответ 1

Сначала шаблон моста из того, что я прочитал, больше подходит для того, когда и класс, и то, что он делает, часто меняется. Сам класс можно рассматривать как реализацию и поведение класса как абстракции.

С другой стороны, абстрактный Factory предоставляет интерфейс для создания групп связанных или зависимых объектов без указания их конкретных классов; их проблемы осуществления.

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

Для меня операции подразумевают методы в java, поэтому операции определяются или объявляются абстракцией, но реализуются в самом классе. Итак, да, абстракция просто объявляет, что операции могут делать с поведением, но фактические реализации выполняются в классе. Кроме того, также является абстрактным Factory.

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

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

Смотрите эти ссылки для получения дополнительной информации:

Использование абстракций и шаблон моста в Java

Википедия: Bridge_Pattern

Мост-шаблон в Java

Шаблон дизайна шаблона моста

Ответ 2

Да. Они подобны. AF используется для создания семейств объектов. Где мост больше связан с поведением, а также позволяет свободно связываться между алгоритмом и платформой.

например: предположим, что мы разрабатываем программу для диагностики сети с использованием Ping и Traceroute, команды на разных платформах различны. Аннотация factory можно использовать для получения экземпляра ping или traceroute для любой из платформ. Это не заканчивается. Bridge позволяет нам разрабатывать алгоритм более высокого уровня, используя команды ping и trace, возвращаемые AF. Алгоритм, который может использовать различную последовательность ping и traceroute, в зависимости от платформы, может быть абстрагирован от конкретных деталей реализации платформы с использованием шаблона моста.

Ответ 3

Есть несколько различий, и мы не можем сравнивать их обоих.

  • Аннотация Factory - это шаблон создания дизайна, который касается создания объекта. Мост - это структурный шаблон проектирования, в котором рассматриваются структура и состав классов.

  • В Мост абстракция и реализация будут меняться независимо. Но в абстрактном factory, если вы меняете абстракцию (интерфейс), вам нужно изменить клиент.

abstract_factory шаблон использования:

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

Контрольный список:

  • Решите, являются ли "независимость от платформы" и сервисами создания источником текущей боли.
  • Отметьте матрицу "платформ" и "продукты".
  • Определите интерфейс factory, который состоит из метода factory для каждого продукта.
  • Определить производный класс factory для каждой платформы, который инкапсулирует все ссылки на новый оператор.
  • Клиент должен удалить все ссылки на новые и использовать методы factory для создания объектов продукта.

bridge pattern:

Используйте его, когда:

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

Связанные вопросы SE:

Выделяет ли шаблон моста абстракцию от реализации?

В чем основное отличие между factory и абстрактными factory шаблонами?

Посмотрите на эту статью journaldev и sourcemaking для углубленного понимания различных шаблонов проектирования.