使用空基 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 依赖于 factoryAfactoryB(它们是您的具体工厂)来创建具体对象。用户对这些混凝土工厂的存在一无所知。

回到你的问题:它与抽象工厂设计模式并没有真正的关系。

没有什么可以阻止您定义抽象基础 class、BaseFactory,它定义了工厂的基本功能(例如 make_object())。 BaseFactory中的虚函数是你的具体工厂应该实现的。