Object Factories.
抽象工厂, 基于多态的实现, 面向接口的设计, 为了避免在实现中对具体的派生类的引用。通常使用Object Factories来生成具体对象。
通常的最简单实现方法是, 给Factory传入一个identifyId, 根据id, factory生成一个具体的对象, 返回基类接口。 但是这样的做法, 工厂还是对具体类有依赖, 而且每次加一个新的对象, 都要修改数个文件, 有较强的耦合性。
用来处理这个问题的办法是: 让工厂维护一个由函数指针构成的集合, 不同的指针生成不同的对象, 需要加入对象的类,只需要在工厂注册自己的id和方法即可。
有了解决方案, 接下来就是泛化这个解决方案了, 思路完全相同, 只是加了几个template参数。 实现如下:
template
<
class AbstractProduct,
typename IdentifierType,
typename ProductCreator = AbstractProduct* (*)(),
template<typename, class>
class FactoryErrorPolicy = DefaultFactoryError
>
class Factory
: public FactoryErrorPolicy<IdentifierType, AbstractProduct>
{
public:
bool Register(const IdentifierType& id, P