#include<iostream>
using namespace std;
class Apple {
public:
void say()
{
cout << "i am a Apple\n";
}
};
class Banana {
public:
void say()
{
cout << "i am a Banana\n";
}
};
enum class Type :char {
APPLE,
BANAN
};
class SimpleFactory {
public:
void* createFruit(Type type) {
void* ptr = nullptr;
switch (type)
{
case Type::APPLE:
ptr = new Apple();
break;
case Type::BANAN:
ptr = new Banana();
break;
default:
cout << "水果类型错误\n";
break;
}
return ptr;
}
};
int main()
{
SimpleFactory* factory = new SimpleFactory();
Apple* apple1 =(Apple*)factory->createFruit(Type::BANAN);
apple1->say();
Banana* banana1 = (Banana*)factory->createFruit(Type::APPLE);
banana1->say();
return 0;
}
输出
- 关于水果的类型,上面的类中用到了强类型枚举(C++11新特性),增强了代码的可读性,并且将枚举元素设置为了char类型,节省了内存。
- 函数createFruit(Type type)的返回值是void*类型,这样处理主要是因为每个case 语句创建出的对象类型是不一样的,为了实现兼容,故此这样处理。
- 得到函数createFruit(Type type)的返回值之后,还需要将其转换成实际的类型,处理起来还是比较繁琐的。