Привет, Северина! Спасибо за такую ​​хорошую статью!
Однако я хотел бы отметить несколько моментов:

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

На самом деле это зависит от того, как вы пишете свои фабричные функции. Повторное создание функции каждый раз, когда вы создаете объект, указывает на то, что что-то не так.

Обычно ваши функции будут определены вне вашей фабрики и назначены созданным объектам как свойство. Это позволяет вашим объектам совместно использовать один и тот же экземпляр функции следующим образом:

Что касается шаблона конструктора в вашей сути, вы должны отметить, что каждый раз, когда вы вызываете конструктор для создания объекта, будет создаваться новая копия функции introduce. Для большой системы это будет иметь не только проблемы с производительностью, но и будет использовать ненужную память для хранения различных копий одной и той же функции. Правило состоит в том, что все, что нужно совместно использовать, должно идти в объект-прототип, как показано ниже:

Что касается определения того, какая фабрика использовалась для создания объекта, вы можете использовать приведенный ниже шаблон (не очень хороший, но он должен выполнять свою работу) в функциях фабрики:

Всегда рекомендуется определять _isRobotInstance как свойство только для чтения, используя Object.defineProperty(), чтобы убедиться, что оно не было случайно изменено в коде.