0
Answered

Можете проверить мою реализацию FactoryMethod?

Сергей Панай 9 months ago updated by Alexander Shvets 9 months ago 1

Всем привет, сейчас читаю книгу "Погружение в паттерны проектирования" и начал с самого начала. С FactoryMethod. Решил повторить пример с кнопками и чуть его развить, но почему то мне кажется, что я этот паттерн использую не правильно. Именно в части использования в index.ts.
Код тут: https://github.com/panay/patterns/tree/master/factory-method

Answer

Answer
Answered

Сергей, здравствуйте!

Вероятно это чувство вызвано вот этим куском:

this.button = this.dialog.createButton();

this.button.onClick(()=> {
console.log(`Hello ${this.env}`);
})

console.log(this.button.render());

Этот код напрашивается на перенос в саму фабрику. В этом патерне, чаще всего пользователем создаваемого продукта выступает остальной код Создателя (класс Dialog), поэтому я и не люблю называть Создателя "фабрикой" — в какноничном устройстве паттерна он производит продукты чисто для себя. Расширяя этот класс, вы подменяете создаваемый продукт, расчитывая что основной код Создателя теперь станет работать с этим новым продуктом.

Вообще, для практики я бы вам рекомендовал конвертировать примеры с PHP, там прекрасный сет примеров с web-спецификой, который для вас, вероятно, будет куда ближе, чем джавовские GUI.

GOOD, I'M SATISFIED
Satisfaction mark by Сергей Панай 9 months ago
Answer
Answered

Сергей, здравствуйте!

Вероятно это чувство вызвано вот этим куском:

this.button = this.dialog.createButton();

this.button.onClick(()=> {
console.log(`Hello ${this.env}`);
})

console.log(this.button.render());

Этот код напрашивается на перенос в саму фабрику. В этом патерне, чаще всего пользователем создаваемого продукта выступает остальной код Создателя (класс Dialog), поэтому я и не люблю называть Создателя "фабрикой" — в какноничном устройстве паттерна он производит продукты чисто для себя. Расширяя этот класс, вы подменяете создаваемый продукт, расчитывая что основной код Создателя теперь станет работать с этим новым продуктом.

Вообще, для практики я бы вам рекомендовал конвертировать примеры с PHP, там прекрасный сет примеров с web-спецификой, который для вас, вероятно, будет куда ближе, чем джавовские GUI.