почему нам действительно требуется функция stati c в шаблоне проектирования Factory?
Подобных требований нет. Если вы реализуете это таким образом, вы можете делать это как хотите.
Но вы должны подумать о:
Если вы должны создать объект фабрики, у которого нет данных экземпляра, почему мы должен иметь этот экземпляр даром? Это только тратит память, потому что размер экземпляра всегда больше нуля по определению.
Сделать его синглтоном особенно бесполезно в этом случае, поскольку мы гарантируем, что у нас есть только один экземпляр, которого мы все еще не необходимость. И плохая сторона синглтона заключается в том, что он обычно проверяет каждый вызов, если он уже создан, что приводит к потере дополнительных ресурсов. код и не содержит данных, все методы могут быть c. Даже если у класса есть элементы данных, но один метод такого класса не использовал ни один из этих членов, сделайте его stati c, так как это позволяет избежать помещения указателя this в стек без какого-либо использования (возможно, компилятор оптимизирует это. ).
Не существует ни единого заводского шаблона, ни единственного варианта реализации. Но если вы обратитесь к типичному шаблону фабрики GOF, есть нечто большее, чем просто создание объекта. Фабрика GOF позволяет создавать различные объекты в зависимости от активного экземпляра фабрики. Идея шаблона фабрики не в создании различных объектов в переменной-селекторе, такой как ваше перечисление, а в создании полных наборов объектов в зависимости от экземпляра фабрики, сохраняя интерфейс одинаковым. Вы полностью упустили это в своем примере. И, как и вы, по-прежнему не требовалось никаких данных, которые делали бы ваш класс пустым, и поэтому все методы должны быть stati c. Если вы используете шаблон GOF, у вас есть как минимум указатель vtable как член данных и виртуальные методы для методов создания.