в C # вы должны объявить все в классе, чтобы пример фабричного шаблона мог выглядеть так:
namespace MySpace {
public class CFactory
{
public static CFactory Current()
{
static CFactory singleton;
return singleton;
}
public CBase Create() { return null; }
}
}
в C ++ у вас нет этого ограничения .. Так считается ли "плохой практикой", чтобы "фабричные" методы были глобальными функциями, а не были ли они классом?
пример 1:
namespace MySpace {
// factory method
std::shared_ptr<CBase> CreateBase() { return NULL; }
}
пример 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;
}
}
пример 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;
}
};
}
библиотека std использует множество глобальных функций для "фабричных методов" .. примером этого может быть std :: make_shared.
Я использовал оба раньше, и я просто не уверен, считается ли один «лучше» по сравнению с другим