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++还是很强大的,不知道其他语言有没有这样优美的用法(羡慕嫉妒恨吧)
- C++使用模板特化实现工厂模式
- 【c++】模板的特化
- C++—模板特化和偏特化
- 【C++】模板类、特化以及偏特化!!!
- 工厂模式的模板实现
- Linux C/C++ 模板:主模板、完全特化、局部特化
- C++:函数模板、类模板及其特化
- C语言实现工厂模式
- C++——模板特化和偏特化
- C++——模板特化和偏特化
- C++——模板特化和偏特化
- C++——模板特化和偏特化
- 模板实现的通用工厂方法模式
- 基于模板、全局特化、局部特化实现的链表
- C++模板的特化
- C++模板的特化
- 使用C++实现工厂模式
- 模板特化
- 15_Android性能优化
- java socket 通信编程
- js中巧用cssText属性批量操作样式(转)
- Android中Intent.action的各种常见作用
- How to change tintColor of UIBarButtonItem? [SWIFT]
- C++使用模板特化实现工厂模式
- vim 查看函数列表方法
- HTML5新控件 - 进度条<progress>
- php正则字符串查找替换
- java并发库之Executors常用的创建ExecutorService的几个方法说明
- 前端如何实现商品规格
- 正则表达式入门
- Cortex M3存储器映射
- 使用POI操作Excel和Word