Страницы

Поиск по вопросам

понедельник, 6 января 2020 г.

В чем отличие паттерна 'абстрактная фабрика' от паттерна 'строитель'?

#c_sharp #шаблоны_проектирования


Не понял в чем различия между паттернами 'абстрактная фабрика' и 'строитель'. На
основе каких критериев выполняется выбор? Какие вопросы я должен задать себе, что бы
понять какой порождающий паттерн из двух приведенных мне использовать?
    


Ответы

Ответ 1



Абстрактная фабрика предоставляет интерфейс для создания семейств, связанных между собой, или независимых объектов, конкретные классы которых неизвестны. Строитель отделяет конструирование сложного объекта от его представления, позволяя использовать один и тот же процесс конструирования для создания различных представлений Основное различие между ними в том, что строитель делает акцент на пошаговом конструировании объекта, а абстрактная фабрика на создании семейств объектов. Строитель возвращает объект на последнем шаге, тогда как с точки зрения абстрактной фабрики продукт возвращается немедленно.

Ответ 2



Если на конкретных примерах, паттерн Строитель - SqlConnectionStringBuilder В них вы задаете параметры, хост, порт, авторизация, логин, пароль, потом вызываете метод ToString() И получаете конечный результат. С фабриками не так. Для инициализации вы вызываете не конструктор, а специальный фабричный метод абстрактного класса или родителя, который возвращает экземпляр нужного потомка. Например: WebRequest request = WebRequest.Create("http://localhost:8080"); вернет HttpWebRequest, а если вы вызовете с другим значением аргумента: WebRequest request = WebRequest.Create("ftp://localhost:21"); вернет FtpWebRequest.

Комментариев нет:

Отправить комментарий