3、工厂模式
模式解释
百度:
主要用于创建对象。用一个工厂来根据输入的条件产生不同的类,然后根据不同类的虚函数
得到不同的结果。
主要解决的问题:
1、接口选择问题
可应用的场景:计算器中对于同样的输入,执行不同的操作:加、减、乘、除。
代码用法实例呈现
1、计算器类+运算符类作为产品
2、工厂类作为使用
实现步骤:
1、虚函数 + 子类继承
2、对抽象产品类 另外改造成具体实现类
3、建造工厂类,用抽象的产品类作为“函数类型定义”,具体实现类作“函数返回值”
返回类型 函数名(参数列表) {// 函数体return 表达式; // 返回值必须与返回类型匹配 }
源码呈现
计算器类:(抽象产品类)
//抽象产品类 class Test { public:int a=1;int b=1;virtual double getResult() {cout << "正在调用:" << __FUNCTION__ << ": ";return 0;}};
运算符类:(具体产品类)
//------------- //具体产品类实现 class add_Test :public Test {//“+” public:double getResult() override{cout <<"正在调用:" << __FUNCTION__ << ": ";double ans = a + b;return ans;}}; class sub_Test :public Test {//“-” public:double getResult() override {cout << "正在调用:" << __FUNCTION__ << ": ";double ans = a - b;return ans;}}; class mul_Test :public Test {//“*” public:double getResult() override {cout << "正在调用:" << __FUNCTION__ << ": ";double ans = a * b;return ans;}}; class div_Test :public Test {//“/” public:double getResult() override {cout << "正在调用:" << __FUNCTION__ << ": ";double ans = a / b;return ans;}}; //----------------------
工厂类:
//工厂类 class factory { public:static Test* create(char x) {cout << "正在调用:" << __FUNCTION__ << ": ";switch (x){case '+': return new add_Test();case '-': return new sub_Test();case '*': return new mul_Test();case '/': return new div_Test();default:cout << "运算符错误." << endl;return NULL;break;}}};
main 函数调用:
#include <iostream> #include <vector>using namespace std;int main() {int a, b;cout << "输入 a,b 的值:";cin >> a >> b;Test* t = factory::create('+');t->a = a;t->b = b;cout << "结果:" << t->getResult() << endl;t = factory::create('/');t->a = a;t->b = b;cout << "结果:" << t->getResult() << endl;return 0; }