en C# que tiene que declarar todo en una clase para un patrón de ejemplo de la fábrica podría parecerse a:patrón de la fábrica adecuada en C++
namespace MySpace {
public class CFactory
{
public static CFactory Current()
{
static CFactory singleton;
return singleton;
}
public CBase Create() { return null; }
}
}
en C++ que no tienen esta limitación .. Por lo que es considerada "mala práctica "tener métodos de" fábrica "¿son funciones globales versus tenerlos como una clase?
ejemplo 1:
namespace MySpace {
// factory method
std::shared_ptr<CBase> CreateBase() { return NULL; }
}
ejemplo 2:
namespace MySpace {
// factory class
class CFactory
{
public:
std::shared_ptr<CBase> CreateBase() { return NULL; }
};
// factory method exposing class
CFactory& GetFactory()
{
static CFactory singleton;
return singleton;
}
}
ejemplo 3:
namespace MySpace {
// factory class with no global function
class CFactory
{
public:
std::shared_ptr<CBase> CreateBase() { return NULL; }
public:
static CFactory& getFactory()
{
static CFactory singleton;
return singleton;
}
};
}
la biblioteca std utiliza una gran cantidad de funciones globales para los "métodos de fábrica" .. un ejemplo de esto sería std :: make_shared.
he utilizado antes y estoy simplemente no está seguro si uno se considera "mejor" sobre el otro
Tiendo a poner un 'Foo * make()' estático o similar dentro de la clase base 'Foo'.Realmente no entiendo qué está pasando con el singleton en su segundo ejemplo ... –
Agregué el ejemplo 3 para eliminar la función global para el singleton. mi atención se centra más en el patrón de fábrica, pero otros también se han confundido con el ejemplo 2. – BabelFish