使用空基 class 来强制抽象工厂继承是不好的做法吗?
Is it bad practice to use an empty base class to force inheritance for an abstract factory?
我有一个叫做 A 的 class,并且说一些基于 A 的继承 classes。
我在这里不包含它们是为了节省一些 space,但也假设我们已经为 A 派生了 classes,这将需要一个工厂。 class B.
相同
struct A
{
...
};
struct B
{
...
};
// start of factory code
//
struct empty_base_factory
{
};
struct factoryA : public empty_base_factory
{
shared_ptr<A> make_object() { return ... }
};
struct factoryB : public empty_base_factory
{
shared_ptr<B> make_object() { return ... }
};
class abstract_factory
{
std::map< uint8_t, std::shared_ptr<empty_base_factory> > iv_factories;
public:
abstract_factory()
{
iv_factories[0] = make_shared<factoryA>();
iv_factories[1] = make_shared<factoryB>();
// .. I might several more similar to this
}
std::shared_ptr<empty_base_factory> make_factory(const uint8_t i_key)
{
return iv_factories[i_key];
}
};
感觉好像我在用 empty_base_factory 强制进行不自然的继承,以便使我在一本书中找到的这个实现能够很好地工作。 make_object 是一种使 empty_base_factory 成为接口的接口方法是有意义的,但是 make_object 的 return 类型是不同的,我不确定如何处理.
通过强制使用空基 class 来尝试实现抽象工厂是一种糟糕的方法吗?想法?
Is this a poor way of trying to implement an abstract factory by
forcing the use of an empty base class? Thoughts?
如果它只是空的,则不需要“empty_base_factory
”。
在Abstract Factory设计模式中:
The abstract factory pattern provides a way to encapsulate a group of
individual factories that have a common theme without specifying their
concrete classes
在您的情况下:abstract_factory
依赖于 factoryA
和 factoryB
(它们是您的具体工厂)来创建具体对象。用户对这些混凝土工厂的存在一无所知。
回到你的问题:它与抽象工厂设计模式并没有真正的关系。
没有什么可以阻止您定义抽象基础 class、BaseFactory
,它定义了工厂的基本功能(例如 make_object()
)。 BaseFactory
中的虚函数是你的具体工厂应该实现的。
我有一个叫做 A 的 class,并且说一些基于 A 的继承 classes。 我在这里不包含它们是为了节省一些 space,但也假设我们已经为 A 派生了 classes,这将需要一个工厂。 class B.
相同struct A
{
...
};
struct B
{
...
};
// start of factory code
//
struct empty_base_factory
{
};
struct factoryA : public empty_base_factory
{
shared_ptr<A> make_object() { return ... }
};
struct factoryB : public empty_base_factory
{
shared_ptr<B> make_object() { return ... }
};
class abstract_factory
{
std::map< uint8_t, std::shared_ptr<empty_base_factory> > iv_factories;
public:
abstract_factory()
{
iv_factories[0] = make_shared<factoryA>();
iv_factories[1] = make_shared<factoryB>();
// .. I might several more similar to this
}
std::shared_ptr<empty_base_factory> make_factory(const uint8_t i_key)
{
return iv_factories[i_key];
}
};
感觉好像我在用 empty_base_factory 强制进行不自然的继承,以便使我在一本书中找到的这个实现能够很好地工作。 make_object 是一种使 empty_base_factory 成为接口的接口方法是有意义的,但是 make_object 的 return 类型是不同的,我不确定如何处理.
通过强制使用空基 class 来尝试实现抽象工厂是一种糟糕的方法吗?想法?
Is this a poor way of trying to implement an abstract factory by forcing the use of an empty base class? Thoughts?
如果它只是空的,则不需要“empty_base_factory
”。
在Abstract Factory设计模式中:
The abstract factory pattern provides a way to encapsulate a group of individual factories that have a common theme without specifying their concrete classes
在您的情况下:abstract_factory
依赖于 factoryA
和 factoryB
(它们是您的具体工厂)来创建具体对象。用户对这些混凝土工厂的存在一无所知。
回到你的问题:它与抽象工厂设计模式并没有真正的关系。
没有什么可以阻止您定义抽象基础 class、BaseFactory
,它定义了工厂的基本功能(例如 make_object()
)。 BaseFactory
中的虚函数是你的具体工厂应该实现的。