@habrdima

В чем принципиальное отличие фабричного метода, строителя и фасада?

вот паттерн строитель на этом сайте
http://www.managepy.ru/паттерн-строитель-builder-н...
фабричный метод
http://www.managepy.ru/category/паттерны-проектиро...
фасад
http://www.managepy.ru/category/паттерны-проектиро...

то ли пример не правильный, то ли паттерн в общей сути ни чем не отличается от фабричного метода или фасад

не ужели разница в названиях паттернов в данном случае в абстрактных связях элементов?
то есть
Лампочка и батарейка могут быть созданы по отдельности, и могут быть созданы вместе ввиде фонарика, поэтому это строитель, а разный формат документов не могут быть вместе, поэтому это фабричный метод?
фасад в примере на сайте собрал объект бумага и принтер в один метод, что бы получить общий результат, и в чем сдесь отличие от фабричного метода или строитель?
можете указать на явное отличие паттернов?
  • Вопрос задан
  • 583 просмотра
Пригласить эксперта
Ответы на вопрос 2
@402d
начинал с бейсика на УКНЦ в 1988
Смотри.
- Параметров у класса очень много. Вместо конструктора с 5 и более аргументами пишем ПОСТРОИТЕЛЬ

- есть набор типовых методов которые точно должны быть в классе, но реализация их сильно отличается.
Например (подключить - записать - прочитать - отключить). Все это может быть через BT,USB,COM,NET
в коде я хочу просто получить текущий транспорт.
и тут на помошь приходит ФАБРИКА. Я прошу вернуть объект через который смогу общаться, а что там будет мне не важно.

- ФАСАД
есть написанный кем - то драйвер для второго примера, но методы у него называются по другому или там немного не так как мне нужно. Вот оберка над тем классом в то что я хочу и есть фасад
Ответ написан
Комментировать
vabka
@vabka
Токсичный шарпист
Не читал ссылки, но разница между паттернами радикальная. Как между автомобилем и сдобным тестом.

Фабричный метод:
По сути просто статичный (не обязательно статичный) метод, который внутри себя создаёт экземпляр объекта и возращает его.
Например:
публичный статичный метод СоздатьФонарик() -> Фонарик


Строитель - про создание объекта "по шагам".
Строитель - это объект, который имеет внутри себя какое-то состояние и набор методов, чтобы это внутреннее состояние изменить и подобие метода "построить", который создаст объект исходя из полученного состояния.

Например:
класс СтроительФонарика {
 публичный метод ДобавитьЛапочку(Лампочка);
 публичный метод ДобавитьБатарейку(Батарейка);
 публичный метод ДобавитьЛинзу(Линза);
 публичный метод ДобавитьКнопку(Кнопка);
 публичный метод Построить() -> Фонарик;
}


Фасад - это класс, который упрощает взаимодействие с чем-то очень сложным и многословным.
Не могу тут дать пример.
Но например если бы фонарик имел метод "нажать на кнопку", то фасад мог бы хранить внутри себя состояние, включен ли фонарик и имел бы методы "Включить" и "Выключить".
Хотя обычно фасад внутри себя содержит много разных классов для управления разными частями большой системы.

Фу блин, я описал декоратор

Декоратор- это просто класс, который внутри содержит объект, который реализует какой-то интерфейс, и при этом сам декоратор реализует этот же интерфейс и делегирует ответственность классу, который в него передали:

Пример:
класс ФонарикНаоборот {
  приватное поле Фонарик.
  конструктор(Фонарик) {
    этот.Фонарик = Фонарик;
  }
  публичный метод Включить() {
    Фонарик.Выключить();
  }
  публичный метод Выключить() {
    Фонарик.Включить();
  }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы