1. 程式人生 > >C++使用模板特化實現工廠模式

C++使用模板特化實現工廠模式

許多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++還是很強大的,不知道其他語言有沒有這樣優美的用法(羨慕嫉妒恨吧)