C++ 简单工厂模式的实现

作笔记使用,如有写的不好或者不够精妙的,还请指正!!如果觉得有帮助也可以三连一波,多谢!

#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;
}

对于三种工厂模式一些个人的总结 :

  1. 简单工厂模式

    • 一个产品基类,然后派生出不同的产品类,最后由工厂类根据用户的需求决定创建哪一个产品的类实例

    • 特点:工厂类非抽象类,是一个包含创建产品方法的创造类;创建类实例的方法是静态的,也成为静态工厂

    • 优点:本着高内聚低耦合的原则,将系统的逻辑部分和功能分开,结构简单,由工厂类统一负责产品类实例的创建

    • 缺点:不易扩展,增加产品类需要修改工厂类的方法;不同的产品需要不同额外参数的时候不支持

  2. 工厂方法模式工厂方法C++实现icon-default.png?t=M666https://blog.csdn.net/weixin_44178960/article/details/126065483?spm=1001.2014.3001.5502

    • 一个产品基类和一个工厂基类,他们下面有相互对应的产品类和工厂类,由工厂类来决定实例化哪一个产品类

    • 特点:

      1. 相比于简单工厂方法,加入了开放封闭原则,扩展性更强,耦合度更低,将简单工厂内部的逻辑判断转移到客户端代码进行,对工厂类进一步抽象,由具体的工厂类实现产品的实例化,增加产品类只需要增加对应的工厂类,不用去工厂类的方法里修改代码;

      2. 消费者跟产品类完全无关,只需要通过工厂接口来实现产品实例化

    • 适用场景:用户知道所需创建对象的类,但不关心如何创建的时候

  3. 抽象工厂模式抽象工厂C++实现icon-default.png?t=M666https://blog.csdn.net/weixin_44178960/article/details/126066536?spm=1001.2014.3001.5502

    • 给客户端提供一个接口,创建不同产品族中的不同产品,不同产品抽象类和具体产品类,一个抽象工厂类,里面声明不同产品生产的虚函数,不同系列的产品工厂类实现具体的产品实例创建接口

    • 特点:

      1. 一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象(将一个系列的产品统一一起创建);

      2. 产品族扩展非常困难,要增加一个系列的某一产品,既要修改工厂抽象类里加代码,又修改具体的实现类里面加代码;

    • 适用场景:相关的产品对象有不同的系列族时


溜了溜了~~~~~ 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想是优秀社畜

您的打赏是对我最大的鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值