Tôi có một ABC với một số lớp dẫn xuất. Để tạo các lớp thừa tôi sử dụng mô hình nhà máy:Đối tượng nhà máy và chức năng của nhà máy
.h file:
class derivedFactory
{
public:
base* createInstance();
};
cpp file:
base* derivedFactory::createInstance()
{
return new derived();
}
Có lợi thế này trên chỉ có một chức năng miễn phí:
tập tin .h:
base* derivedFactoryFunction();
.cpp tệp:
base* derivedFactoryFunction()
{
return new derived();
}
Ngoài ra: Tôi sử dụng mẫu nhà máy trừu tượng để tiêm phụ thuộc. Tôi có thể sử dụng một hệ thống phân cấp thừa kế dựa trên ABC:
class objectCreator
{
public:
base* create() = 0;
};
Có lợi thế nào để sử dụng này trên một con trỏ hàm:
boost::function<base*()> factory_ptr;
Sử dụng boost :: bind/lambda này dường như làm cho mã của tôi hợp lý hơn, và nếu tôi ước tôi có thể bọc một vật thể thực sự trong đó. Tôi có thể thấy rằng có thể có một hiệu suất giảm nhẹ nhưng điều này là rất nhiều lo lắng vì nó chỉ được gọi là trong khi khởi động.
Con trỏ sẽ cho phép triển khai mẫu nhà máy trừu tượng. Tôi đã mở rộng trên nó ở trên –