C++设计模式-工厂模式

37 篇文章 12 订阅

目录

 

 

基本概念

代码及实例


 

基本概念

工厂方法模式(Factory Method):定义一个用于创建对象的接口,让字类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类;

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

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

UML图如下(这里以计算器为例)

 

代码及实例

程序运行截图如下:

源码如下:

Head.h

#ifndef HEAD_H
#define HEAD_H


//运算相关
class Operation{

public:
	double m_numberA;
	double m_numberB;
	virtual double getResult();
};

class AddOperation: public Operation{

public:
	AddOperation();
	double getResult();
};

class MultiOperation: public Operation{

public:
	MultiOperation();
	double getResult();
};

//工厂相关

class IFactory{

public:
	virtual Operation *createOperation();
};

class AddFactory: public IFactory{

public:
	Operation *createOperation();
};

class MultiFactory: public IFactory{

public:
	Operation *createOperation();
};
                                                                                                                                                                                                                                                         

#endif	//HEAD_H

Head.cpp

#include "Head.h"
#include <iostream>
#include <string>
using namespace std;

Operation *IFactory::createOperation()
{
	return nullptr;
}

Operation *AddFactory::createOperation()
{
	return new AddOperation;
}

double Operation::getResult()
{
	return -1;
}

AddOperation::AddOperation()
{
	m_numberA = 0.0;
	m_numberB = 0.0;
}

double AddOperation::getResult()
{
	return m_numberA + m_numberB;
}

MultiOperation::MultiOperation()
{
	m_numberA = 0.0;
	m_numberB = 0.0;
}

double MultiOperation::getResult()
{
	return m_numberA * m_numberB;
}

Operation * MultiFactory::createOperation()
{
	return new MultiOperation;
}

main.cpp

#include "Head.h"
#include <iostream>
using namespace std;

int main(int *argc, int *argv){

	IFactory *operAddFactory = new AddFactory;
	Operation *addOper = operAddFactory->createOperation();
	addOper->m_numberA = 100;
	addOper->m_numberB = 200;
	cout << "operAddFactory result is : " << addOper->getResult() << endl;
	delete operAddFactory;
	delete addOper;

	cout << "--------------- 华丽的分割线 ---------------" << endl;
	IFactory *operMultiFactory = new MultiFactory;
	Operation *multiOper = operMultiFactory->createOperation();
	multiOper->m_numberA = 12;
	multiOper->m_numberB = 5;
	cout << "operMultiFactory result is : " << multiOper->getResult() << endl;
	delete operMultiFactory;
	delete multiOper;

	getchar();
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IT1995

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值