【c++设计模式03】创建型1:简单工厂模式(Simple Factory Pattern)-四、demo

时间:2024-02-18 15:15:31
#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)的返回值之后,还需要将其转换成实际的类型,处理起来还是比较繁琐的。