0
Отвечено

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

Сергей Панай 5 年 前 更新人: anonymous 5 年 前 1

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

解答

解答
Отвечено

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

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

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

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

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

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

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

很好,我很满意
满意度评分用户: Сергей Панай 5 年 前
解答
Отвечено

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

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

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

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

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

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

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

UserEcho 的客户支持