工厂模式之【Loki】

一,工厂模式的初衷

  C++中class跟object是不同的东西:

  • class由程序员产生,object由程序产生。
  • 你无法在执行期产生新的class,无法在编译器产生新的object。
  • classes donnot have first-class status: You cannot copy a class, store it in a variable, or return it from a function.

  C++中的type跟value之间也存在裂缝:value拥有type所表示的类型,但是type无法靠自身存活。采用某种技巧拿value换取正确的type,最后运用那个type产生object。这种"object-type-object"交易行为就是object factories的基石。

 

二,具体到Loki中Factory pattern 

Loki中工厂定义如下:

  • AbstractProduct指定继承体系中的基类base class
  • IdentifierType是一种所谓的昵称(cookie type),用来表示继承体系中的某个型别。IdentifierType必须是有序型别,使之得以存储在实体店std::map。常用的标识符是int或者string。
  • ProductCreator是用来生成对象的一个可调用体(callable entity)。这个型别必须支持operator(),并且不带参数,传回一个pointer to AbstractProduct。ProductCreator总是和一个型别标识符注册在一起。

 

  Loki中的Factory自由度(DOF)比较大:

  • 型别:不同于类型class。型别常用int,或者string。可以为一个类注册一个型别,也可以为一个类注册多个型别。对于class Geometry : public AbstractGeometry{} 继承体系。
    class Box : public Geometry{}
    class Cylinder : public Geometry{}
    class Cone : public Geometry{}
    ...
    class Pyramid : public Geometry{}
    可以为一个类注册一个型别
      PFactory::Instance().Register( "Box", createBox );
      PFactory::Instance().Register( "Cylinder", createCylinder );
      PFactory::Instance().Register( "Cone", createCone );
      ...
      PFactory::Instance().Register( "Pyramid", createPyramid );
    也可以为一个类注册多个型别:
      PFactory::Instance().Register( "Cube", createCube );
      PFactory::Instance().Register( "BoudingBox", createBoundingBox );
  • ProductCreator定义了对象创建的方式
      简单函数:参数最多十五个
      重载函数
      多态类成员函数
      模板类成员函数

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值