trong C# bạn phải khai báo tất cả mọi thứ trong một lớp học nên một hình ví dụ nhà máy có thể trông giống như:mô hình nhà máy thích hợp trong C++
namespace MySpace {
public class CFactory
{
public static CFactory Current()
{
static CFactory singleton;
return singleton;
}
public CBase Create() { return null; }
}
}
trong C++ bạn không có hạn chế này .. Vì vậy, nó được coi là "thực tế xấu "để có" nhà máy "phương pháp được toàn cầu chức năng vs có họ là một lớp học?
dụ 1:
namespace MySpace {
// factory method
std::shared_ptr<CBase> CreateBase() { return NULL; }
}
dụ 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;
}
}
dụ 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;
}
};
}
thư viện std sử dụng rất nhiều các chức năng toàn cầu cho "phương pháp nhà máy" .. một ví dụ về điều này sẽ là std :: make_shared.
Tôi đã sử dụng cả trước và tôi chỉ không chắc chắn nếu một được coi là "tốt hơn" trong khác
Tôi có xu hướng đặt một 'static Foo * make()' hoặc tương tự bên trong lớp cơ sở 'Foo'.Tôi thực sự không hiểu những gì đang xảy ra với singleton trong ví dụ thứ hai của bạn ... –
Tôi đã thêm ví dụ 3 để loại bỏ chức năng toàn cầu cho singleton. trọng tâm của tôi là nhiều hơn về mô hình nhà máy, nhưng những người khác đã bị nhầm lẫn bởi ví dụ 2 là tốt. – BabelFish