Object Factory

可以定义基类create方法,但是具体的生成方法由子类去实现。也可以以一个特征值产生对象。这是Object Factory可以做的事情。

 从生成对象的角度来说,生成一个特定的对象只要知道特定的一个类就可以了,虚函数可以给我们这个便利。

但是通过一个特征值生成对象,首先要解决的问题是生成方法要知道所有可以生成的类、极端情况下,后期添加类是极有可能的。这里有两点,第一,我们不想使用switch,第二,我们不想文件关联过多。

Loki使用了map替代了switch的选择,因为map可以动态更改,Loki存放生成函数指针,这避免了文件的依赖。这样,Kit的泛化需要以下policy类型、标志符和生成器。健全的工厂出错处理是必不可少的,所以有必要添加出错处理方法,这样Kit成了如下这样:

template
<      class     AbstractProduct,
    typename    IdentifierType,
    typename    ProductCreator,
    template    
< typename, class >      class  FactoryErrorPolicy
>
class     Factory    : public     FactoryErrorPolicy < IdentifierType,AbstractProduct > ;

可以使用出错处理类中的方法依照类型信息做相应处理。

对于克隆工厂而言,所有类必须继承基类克隆方法是必须的,另外,在生产对象的时候,克隆的本体也是必须的,因而,在默认克隆方法的前提下,我们只需要一个克隆本体就可以了,克隆工厂可以如此:

template
<      class     AbstractProduct,
    typename    ProductCreator
        
=  AbstractProduct *  ( * )( const  AbstractProduct * ),
    template    
< typename, class >      class  FactoryErrorPolicy
>
class     CloneFactory;

仅仅表现方式不一样,思想完全一样。

当然,我隐藏了底层的注册、解除注册方法。

Object Factory就是这样一个东西。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值