工厂方法模式

本文介绍了工厂方法模式,该模式将实例化的责任延迟到子类,使得代码更加灵活,降低了耦合。内容包括抽象工厂类、抽象产品类、具体工厂类和具体产品类的角色介绍,以及工厂方法模式的优缺点分析。
摘要由CSDN通过智能技术生成

工厂方法模式

在这里插入图片描述
在这里插入图片描述

运用简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件同态实例化相关的类,对客户端来说,去除了与具体产品的依赖

工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代来进行,想要加功能,本来是要修改工厂类的,然后修改客户端就行了。

  • 抽象工厂类
    抽象工厂类中定义具体工厂调用的接口
  • 抽象产品类
    抽象产品类中定义具体产品的调用接口
  • 具体工厂类
    实现不同的产品的生产
  • 具体产品类
    实现产品的功能
    工厂方法模式的优缺点:
    优点:
#include <iostream>

using namespace std;


//工厂方法类

//抽象产品类
template<typename T>
class Base
{
public:
	virtual T operation(T a,T b) = 0;
};


//具体产品类
template<typename T>
class Add:public Base<T>
{
public:
	T operation(T a,T b)
	{
		return a + b;
	}
};

template<typename T>
class Sub:public Base<T>
{
public:
	T operation(T a,T b)
	{
		return a - b;
	}
};

template<typename T>
class Mul:public Base<T>
{
public:
	T operation(T a,T b)
	{
		return a * b;
	}
};

template<typename T>
class Div:public Base<T>
{
public:
	T operation(T a,T b)
	{
		if(b == 0)
		{
			throw "除数为0";
		}
		return a / b;
	}
};



//抽象工厂类
template<typename T>
class Factory
{
public:
	virtual Base<T> *createOperation() = 0;
};

//具体工厂类
template<typename T>
class AddFactoty: public Factory<T>
{
public:
	Base<T> *createOperation()
	{
		return new Add<T>();
	}
};

template<typename T>
class SubFactoty: public Factory<T>
{
public:
	Base<T> *createOperation()
	{
		return new Sub<T>();
	}
};

template<typename T>
class MulFactoty: public Factory<T>
{
public:
	Base<T> *createOperation()
	{
		return new Mul<T>();
	}
};

template<typename T>
class DivFactoty: public Factory<T>
{
public:
	Base<T> *createOperation()
	{
		return new Div<T>();
	}
};


int main()
{
	Factory<int> *oper = new AddFactoty<int>();//创建一个加法工厂
	Base<int> *ADD = (Add<int> *)oper->createOperation();
	cout << ADD->operation(20,10) << endl;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值