作笔记使用,如有写的不好或者不够精妙的,还请指正!!如果觉得有帮助也可以三连一波,多谢!
#include<iostream>
using namespace std;
/*
设置计算器基类,由派生类:加、减、乘、除类实现具体功能,最后由工厂类根据用户输入生成类实例
*/
class Caculator {
public:
virtual int caculate(int a, int b) = 0; // 设为纯虚函数,子类必须重写
};
class Add : public Caculator {
public:
int caculate(int a, int b) {
return a + b;
}
};
class Minus : public Caculator {
public:
int caculate(int a, int b) {
return a - b;
}
};
class Multiply : public Caculator {
public:
int caculate(int a, int b) {
return a * b;
}
};
class Divide : public Caculator {
public:
int caculate(int a, int b) {
return a / b;
}
};
// 工厂类
class Factory {
public:
// 返回一个父类指针指向子类对象(多态的实现)
Caculator* create_caculator(char ch) {
switch (ch) {
case 'a':
return new Add();
case 'b':
return new Minus();
case 'c':
return new Multiply();
case 'd':
return new Divide();
default:
cout << "ERROR" << endl;
return nullptr;
}
}
};
int main() {
// 检验功能
int a = 10, b = 2;
Factory factory;
Caculator* add = factory.create_caculator('a');
Caculator* minus = factory.create_caculator('b');
Caculator* multiply = factory.create_caculator('c');
Caculator* divide = factory.create_caculator('d');
cout << add->caculate(a, b) << endl;
cout << minus->caculate(a, b) << endl;
cout << multiply->caculate(a, b) << endl;
cout << divide->caculate(a, b) << endl;
return 0;
}
对于三种工厂模式一些个人的总结 :
-
简单工厂模式
-
一个产品基类,然后派生出不同的产品类,最后由工厂类根据用户的需求决定创建哪一个产品的类实例
-
特点:工厂类非抽象类,是一个包含创建产品方法的创造类;创建类实例的方法是静态的,也成为静态工厂
-
优点:本着高内聚低耦合的原则,将系统的逻辑部分和功能分开,结构简单,由工厂类统一负责产品类实例的创建
-
缺点:不易扩展,增加产品类需要修改工厂类的方法;不同的产品需要不同额外参数的时候不支持
-
-
工厂方法模式工厂方法C++实现
https://blog.csdn.net/weixin_44178960/article/details/126065483?spm=1001.2014.3001.5502
-
一个产品基类和一个工厂基类,他们下面有相互对应的产品类和工厂类,由工厂类来决定实例化哪一个产品类
-
特点:
-
相比于简单工厂方法,加入了开放封闭原则,扩展性更强,耦合度更低,将简单工厂内部的逻辑判断转移到客户端代码进行,对工厂类进一步抽象,由具体的工厂类实现产品的实例化,增加产品类只需要增加对应的工厂类,不用去工厂类的方法里修改代码;
-
消费者跟产品类完全无关,只需要通过工厂接口来实现产品实例化
-
-
适用场景:用户知道所需创建对象的类,但不关心如何创建的时候
-
-
抽象工厂模式抽象工厂C++实现
https://blog.csdn.net/weixin_44178960/article/details/126066536?spm=1001.2014.3001.5502
-
给客户端提供一个接口,创建不同产品族中的不同产品,不同产品抽象类和具体产品类,一个抽象工厂类,里面声明不同产品生产的虚函数,不同系列的产品工厂类实现具体的产品实例创建接口
-
特点:
-
一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象(将一个系列的产品统一一起创建);
-
产品族扩展非常困难,要增加一个系列的某一产品,既要修改工厂抽象类里加代码,又修改具体的实现类里面加代码;
-
-
适用场景:相关的产品对象有不同的系列族时
-
溜了溜了~~~~~