C++使用模板特化实现工厂模式

来源:互联网 发布:手机上网代理软件 编辑:程序博客网 时间:2024/06/06 12:25

许多C++程序员使用简单工厂创建自己的对象,这时就会有很多这样的分支,比如:

class Staff

{

virtual double salary() = 0;//薪酬

}


class Engineer : public Staff;//举个栗子,不写实现了

class Leader : public Staff;

class Saler : public Staff;


class Factory

{

Staff* createStaff(int type)

{

if(type == 0) return new Engineer;

if(type == 1) return new Leader;

if(type == 2) return new Saler

}

};

窃以为这样的代码不够美观,扩展性也不强

如果你是个C#或Java程序员,你当然可以用反射去优化它,但C++可没有反射,那怎么办嘞.当然你也可以实现反射(请参考鄙人多年前的另一篇博文)

但如果项目经理催得紧(你大笔一挥,就这简单工厂上吧),鄙人还有个更猥琐的用法

 template<class T>

class Factory

{

Staff* createStaff() { return NULL; }

};

 template<>

class Factory<Engineer>

{

static Staff* createStaff() { return new Engineer ; }

};

 template<>

class Factory<Leader>

{

static  Staff* createStaff() { return new Leader; }

};


 template<>

class Factory<Saler >

{

static  Staff* createStaff() { return new Saler ; }

};

这样你用Factory<Leader>::createStaff()就能获得一个经理的对象了,是不是很神奇啊(我在想多态是不是也能这么搞啊)

看来C++还是很强大的,不知道其他语言有没有这样优美的用法(羡慕嫉妒恨吧)







0 0
原创粉丝点击