大话设计模式之简单工厂模式

本文介绍简单工厂模式的概念及其在计算器应用中的实现。通过一个工厂类决定创建哪种产品类实例,如加减乘除等操作。提供了详细的代码示例,包括工厂类及各种操作类的定义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,概念简单工厂模式就是通过一个工厂类决定创建出哪一种产品类的实例。顾名思义工厂就是生产东西的,有原料(参数),模子(对象)就能生产出很多个具有相同功能的对象啦。例如,要设计一个计算器,有许多计算操作,+,-,*,/等,可以通过设计一个计算器操作类工厂,来生产所需要的操作,这就是简单工厂模式

2,UML



3, 示例

//Operate.h

#pragma once
#include <string>
#include <iostream>
class COperation
{
public:
	COperation(void);
public:
	virtual ~COperation(void);
public:
	virtual double GetResult(const double A, const double B) const = 0;
};
//Operate.cpp
#include "Operation.h"

COperation::COperation(void)
{
}

COperation::~COperation(void)
{
}
<pre name="code" class="plain">
</pre>

//OperationSimpleFactory.h

<span style="font-family: Arial, Helvetica, sans-serif;"> 工厂类 */</span>
#pragma once
#include "OperationAdd.h"
#include "OperationSub.h"
#include "OperationMul.h"
#include "OperationDiv.h"
#include <cassert>
class COperationSimpleFactory
{
public:
	COperationSimpleFactory(void);
public:
	~COperationSimpleFactory(void);
public:
	/* 静态工厂方法 */
	static COperation * CreateOperation(const std::string & model);
};

//OperationSimpleFactory.cpp

#include "OperationSimpleFactory.h"

COperationSimpleFactory::COperationSimpleFactory(void)
{
}

COperationSimpleFactory::~COperationSimpleFactory(void)
{
}

COperation * COperationSimpleFactory::CreateOperation(const std::string & model)
{
	if (model == "+")
	{
		return new COperationAdd();
	}
	else if (model == "-")
	{
		return new COperationSub();
	}
	else if (model == "*")
	{
		return new COperationMul();
	}
	else if (model == "/")
	{
		return new COperationDiv();
	}

	else
	{
		assert(false);
	}
	return NULL;
}

//OperationAdd.h

#pragma once
#include "Operation.h"

class COperationAdd : public COperation
{
public:
	COperationAdd(void);
public:
	virtual ~COperationAdd(void);
public:
	virtual double GetResult(const double A, const double B) const;
};

//OperationAdd.cpp

#include "OperationAdd.h"

COperationAdd::COperationAdd(void)
{
	std::cout << "执行加法" << std::endl;
}

COperationAdd::~COperationAdd(void)
{
}
double COperationAdd::GetResult(const double A, const double B) const
{
	double result = 0;
	result = A + B ;
	return result;
}

//OperationDiv.h

#pragma once
#include "Operation.h"

class COperationDiv : public COperation
{
public:
	COperationDiv(void);
public:
	virtual ~COperationDiv(void);
public:
	virtual double GetResult(const double A, const double B) const;
};

//OperationDiv.cpp

#include "OperationDiv.h"
#include <cassert>
COperationDiv::COperationDiv(void)
{
	std::cout << "执行乘法" << std::endl;
}

COperationDiv::~COperationDiv(void)
{
}
double COperationDiv::GetResult(const double A, const double B) const
{
	double result = 0;
	if(B == 0)
		assert(0);
	result = A / B ;
	return result;
}

//OperationMul.h

#pragma once
#include "Operation.h"

class COperationMul : public COperation
{
public:
	COperationMul(void);
public:
	virtual ~COperationMul(void);
public:
	virtual double GetResult(const double A, const double B) const;
};
//OperationMul.cpp
#include "OperationMul.h"
COperationMul::COperationMul(void)
{
	std::cout << "执行乘法" << std::endl;
}

COperationMul::~COperationMul(void)
{
}
double COperationMul::GetResult(const double A, const double B) const
{
	double result = 0;
	result = A * B ;
	return result;
}

//OperationSub.h

#pragma once
#include "Operation.h"

class COperationSub :public COperation
{
public:
	COperationSub(void);
public:
	virtual ~COperationSub(void);
public:
	virtual double GetResult(const double A, const double B) const;
};

//OperationSub.cpp

#include "OperationSub.h"

COperationSub::COperationSub(void)
{
	std::cout << "执行减法:" << std::endl;
}

COperationSub::~COperationSub(void)
{
}

double COperationSub::GetResult(const double A, const double B) const
{
	double result = 0;
	result = A - B ;
	return result;
}
//main
#include "iostream"
#include "OperationSimpleFactory.h"

int main(int argc,char* argv[])
{
	COperation * operate = NULL;

	std::string modeName = "/";
	operate = COperationSimpleFactory::CreateOperation(modeName);
	std::cout<<operate->GetResult(12,0)<<std::endl;
	delete operate;
	operate = NULL;
	return 0;
}







简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它通过一个工厂类来创建不同类型的对象,而无需暴露对象创建的逻辑给客户端。在Python中,简单工厂模式可以通过一个工厂类来创建不同的产品对象。下面是一个简单的示例: ```python class Product: def operation(self): pass class ConcreteProductA(Product): def operation(self): print("Performing operation A.") class ConcreteProductB(Product): def operation(self): print("Performing operation B.") class SimpleFactory: @staticmethod def create_product(product_type): if product_type == "A": return ConcreteProductA() elif product_type == "B": return ConcreteProductB() else: raise ValueError("Invalid product type.") # 使用简单工厂创建产品对象 factory = SimpleFactory() product_a = factory.create_product("A") product_a.operation() product_b = factory.create_product("B") product_b.operation() ``` 在上述示例中,`Product` 是一个抽象产品类,`ConcreteProductA` 和 `ConcreteProductB` 是具体产品类。`SimpleFactory` 是工厂类,通过 `create_product` 方法根据不同的产品类型创建相应的产品对象。 通过简单工厂模式,客户端无需知道具体的产品类,只需要通过工厂类来创建产品对象。这样可以降低客户端与具体产品类的耦合度,并且当需要新增产品时,只需要修改工厂类即可。 希望这个简单的示例能帮助你理解简单工厂模式在Python中的应用。如果有任何进一步的问题,请随时提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值