C++ 工厂方法模式的实现

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


代码: 

#include<iostream>
using namespace std;

/*
	工厂方法模式
	1.构建产品基类,派生类重写基类虚函数实现具体产品的功能
	2.构建工厂基类,派生类重写基类虚函数实现生产不同产品
	3.客户端代码直接生成对应的工厂类,然后调用工厂类的方法生成产品
*/
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:
	virtual Factory* create_factory() = 0;
};

class AddFactory {
public:
	Caculator* create_factory() {
		return new Add();
	}
};

class MinusFactory {
public:
	Caculator* create_factory() {
		return new Minus();
	}
};

class MultiplyFactory {
public:
	Caculator* create_factory() {
		return new Multiply();
	}
};

class DivideFactory {
public:
	Caculator* create_factory() {
		return new Divide();
	}
};

int main() {
	AddFactory addFactory;
	Caculator* add = addFactory.create_factory();
	cout << add->caculate(1,3) << endl;
	delete add;
	return 0;
}

对于三种工厂的个人见解: 

  1. 简单工厂模式简单工厂C++实现https://blog.csdn.net/weixin_44178960/article/details/126064298?spm=1001.2014.3001.5502

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

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

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

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

  2. 工厂方法模式

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

    • 特点:

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

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

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

  3. 抽象工厂模式抽象工厂C++实现https://blog.csdn.net/weixin_44178960/article/details/126066536?spm=1001.2014.3001.5502

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

    • 特点:

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

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

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


 溜了溜了~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

梦想是优秀社畜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值