淘客熙熙

主题:【文摘】二月春风--关于编程的,不喜勿进 -- 柚子

共:💬20 🌺7 新:
全看分页树展 · 主题 跟帖
家园 好文!

不过,有点异议,

现在这个静态的类型安全工厂,有没有缺点呢?有,那就是不能利用思路1,也就是不能随机产生对象,而制作出千奇百怪的植物模型。但是它也许能实现思路2,就是利用一组DNA作为模板,来生成特定模式的植物。

采用SafeNodeFactory还是可以随机产生对象,不过是再增加一层Abstraction layer而已。

稍微修改一下NodeFactory到RandomNodeFactory专门用于随机产生Node的case,

class RandomNodeFactory{

public:

static Node* Create(){

int type=rand()%4;

switch(type){

case 0:

return SafeNodeFactory<Branch>::Create();

case 1:

return SafeNodeFactory<Leaf>::Create();

case 2:

return SafeNodeFactory<Fruit>::Create();

case 4:

return SafeNodeFactory<Flower>::Create();

default:

throw runtime_error("unknown type");

}

}

};

或者简单用一个函数(也可以inline),

Node* RandomCreate()

{

int type=rand()%4;

switch(type){

case 0:

return SafeNodeFactory<Branch>::Create();

case 1:

return SafeNodeFactory<Leaf>::Create();

case 2:

return SafeNodeFactory<Fruit>::Create();

case 4:

return SafeNodeFactory<Flower>::Create();

default:

throw runtime_error("unknown type");

}

}

只要把“随机产生”这个逻辑移到上一层即可。

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河