Является ли `Clone ()` в шаблоне прототипа фабричным методом? - PullRequest
1 голос
/ 11 июня 2019

Design Patterns от Gamma et al описывает прототип модели:

enter image description here

Считается ли Clone() фабричным методом? (Для сравнения, абстрактная фабрика - это коллекция фабричных методов.)

Почему они (не) фабричные методы? Для пояснения, не могли бы вы также дать определение фабричного метода?

Примером Clone() является

Door* Door::Clone  () const {
return new Door(*this);
}

Есть похожий вопрос В шаблоне компоновщика, метод `buildpart ()` фабричные методы?

1 Ответ

1 голос
/ 11 июня 2019

Хотя есть место для интерпретации, в соответствии с общими определениями clone() делает не квалифицируемым как фабричный метод, потому что клиентский код знает о логике реализации.Клиентский код знает об этой логике, потому что он вызывает метод clone(), который имеет четко определенную семантику (для создания копии объекта).

Напротив, фабричные методы скрывают, как создается объект.Это можно сделать с помощью клонирования или другими способами.

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

...