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