一、概念
工厂类作用:是一种实例化对象的方式,创造实例。只要输入需要实例化对象的名字,就可以通过工厂类相应的工厂函数来制造你需要的实例对象。
简单工厂模式的核心是,对于一个父类的多个继承子类,工厂函数根据用户输入,自动new出一个子类对象并返回其父类的指针,这样利用父类的指针执行父类的虚函数,就可以动态绑定子类的重写函数,从而实现多态。
二、例子讲解:计算器
Operation为父类,加减乘除为Operation的四个子类,重写Result(),定义工厂类中的工厂函数,其根据用户的输入new出相应的对象实例并返回其父类的指针。
三、代码
EasyFactory.h
using namespace std;
class Operation
{
public:
double num_A = 0;
double num_B = 0;
virtual double Result() {
double result = 0;
cout << "I'm Operation::Result();result = " << result << endl;
return result;
}
};
/**** 加减乘除类 *****************************************************/
class Add : public Operation
{
public:
double Result()
{
double result = 0;
result = num_A + num_B;
cout << "I'm Add::Result()" << endl;
return result;
}
};
class Sub : public Operation
{
public:
double Result()
{
double result = 0;
result = num_A - num_B;
cout << "I'm Sub::Result()" << endl;
return result;
}
};
class Mul : public Operation
{
public:
double Result()
{
double result = 0;
result = num_A * num_B;
cout << "I'm Mul::Result()" << endl;
return result;
}
};
class Div : public Operation
{
public:
double Result()
{
double result = 0;
if (0 == num_B)
{
cout << "除数为0" << endl;
return -1;
}
else {
result = num_A / num_B;
}
cout << "I'm Add::Result()" << endl;
return result;
}
};
/**** 加减乘除类 *****************************************************/
//工厂类
class operFactory
{
public:
static Operation *createOperation(char c) //工厂函数
{
Operation * oper = NULL;
switch (c)
{
case '+':
oper = new Add; //new了一个子类对象,返回一个父类指针.即父类指针指向子类对象
return oper;
break;
case '-':
oper = new Sub;
return oper;
break;
case '*':
oper = new Mul;
return oper;
break;
case '/':
oper = new Div;
return oper;
break;
}
}
};
main.cpp
#include <iostream>
#include "EasyFactory.h"
using namespace std;
int main()
{
Operation *oper = NULL;
oper = operFactory::createOperation('/'); //createOperation('+')返回的是一个父类指针。new了一个子类对象。父类指针oper 指向子类对象,所以oper->Result() 调用的是子类的Result()
oper->num_A = 10;
oper->num_B = 5;
double result1 = oper->Result();
cout << result1 << endl;
}
打印结果: