C ++中可扩展的工厂方法

时间:2018-01-11 23:21:01

标签: c++ inheritance polymorphism factory

问题

想象一下,在框架中有一个基类,它定义了几个纯虚方法,它实际上是一个接口。这个类的用户继承它并像往常一样实现它的方法。

我想要获得的是为框架提供一种机制,通过统一的工厂方法实例化派生类,该方法返回派生类的实例。

尝试

我想在基类中放置一个静态base* get_one()方法来重新实现,但当然,它是静态的,它不能是虚拟的。

目标

最终目标是为所谓的驱动程序提供基类,以便用户可以编写自己的实现,并且当被要求时,框架可以使用该特定驱动程序返回设备实例。

1 个答案:

答案 0 :(得分:1)

一种简单的(我认为常见的)方法是注册" (抽象)基类的派生类的实例,然后用作工厂。然后,您可以决定驱动程序是单例还是实例是"模板"每次呼叫者请求驱动程序时从中抽取副本。 一个简单的实现可能如下所示:

// Framework part:
class Driver {
public:
    static Driver* getDriver() {
        return driver;  // return the instance (or make a copy, if desired)
    };
    static void registerDriver(Driver *driver) {
        Driver::driver = driver;
    }
private:
    static Driver *driver;
};

Driver *Driver::driver = nullptr;


// Customization part:
class MyDriver : public Driver {

};

MyDriver mySingleDriver;

int main()
{
    Driver::registerDriver(&mySingleDriver);
    return 0;
}

在制作中,您可能会使用托管指针并实施更复杂的单身"做法。但原则应该是明确的......