C++ 08工厂方法模式

原创 2015年11月20日 20:23:42

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


下面还是举例怎样设计一个计算器。

结构图如下:

请自觉的比较 简单工厂模式和工厂方法模式的异同。


直接上代码:

#include<iostream>
#include<string>

using namespace std;

//抽象运算类
class Operation
{
private:
	double numberA = 0;
	double numberB = 0;
public:
	double getNumberA()
	{
		return numberA;
	}
	void setNumberA(double _numberA)
	{
		numberA = _numberA;
	}
	double getNumberB()
	{
		return numberB;
	}
	void setNumberB(double _numberB)
	{
		numberB = _numberB;
	}

	virtual double getResult() = 0
	{
		double result = 0;
		return result;
	}
};

//加法类
class OperationAdd :public Operation
{
public:
	double getResult()
	{
		double result = 0;
		result = getNumberA() + getNumberB();
		return result;
	}
};

//减法类
class OperationSub :public Operation
{
public:
	double getResult()
	{
		double result = 0;
		result = getNumberA() - getNumberB();
		return result;
	}
};

//乘法类
class OperationMul :public Operation
{
public:
	double getResult()
	{
		double result = 0;
		result = getNumberA() * getNumberB();
		return result;
	}
};

//除法类
class OperationDiv :public Operation
{
public:
	double getResult()
	{
		double result = 0;
		if (this->getNumberB() == 0)
		{
			cout << "除数不能为0" << endl;
			return 0;
		}
		result = getNumberA() / getNumberB();
		return result;
	}
};

//工厂接口类
class IFactory
{
public:
	virtual Operation* createOperation()=0;
};

//加法工厂类
class AddFactory : public IFactory
{
public:
	 Operation* createOperation()
	{
		return new OperationAdd();
	}
};
//减法工厂类
class SubFactory : public IFactory
{
public:
	Operation* createOperation()
	{
		return new OperationSub();
	}
};
//乘法工厂类
class MulFactory : public IFactory
{
public:
	Operation* createOperation()
	{
		return new OperationMul();
	}
};
//除法工厂类
class DivFactory : public IFactory
{
public:
	Operation* createOperation()
	{
		return new OperationDiv();
	}
};


//客户端代码
int main()
{
	IFactory* operFactory = new DivFactory();
	Operation * oper = operFactory->createOperation();
	oper->setNumberA(1);
	oper->setNumberB(2);
	double result = oper->getResult();
	cout << "result="<< result << endl;
}

用工厂方法模式实现的计算器,当再扩展其他新功能时,不需要修改其他原有的代码,只需要扩展新的功能类和具体的工厂类,此模式不像简单方法模式需要修改工厂类中的逻辑判断。

这样整个工厂和产品体系其实都没有修改的变化,而只是扩展的变化,这完全符合了开放-封闭原则的精神。

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


相关文章推荐

工厂方法模式(设计模式_08)

工厂方法模式遵循了,开放封闭式原则,我们直接用案例来体现:// 定义一个电脑接口 public interface IComputer { // 获取电脑组件的方法 public voi...

C++模板实现的通用工厂方法模式

C++模板实现的通用工厂方法模式 1.工厂方法(Factory Method)模式 工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,...
  • gouki04
  • gouki04
  • 2011年11月30日 10:11
  • 5221

qt(c++)之 工厂方法模式

转载自:http://blog.csdn.net/liang19890820/article/details/70652858 简述 工厂方法模式(Factory Method Pattern)是一...

C++抽象工厂方法模式

遇到了这样一件事情: 为了调用摄像头及相关功能,有Opencv,QCamera和QML的Camera几种方法。我就随手做了三个类,并分别实现。这样做,每次调用这三个类时,都要看一下每个类中每个方法的...

工厂方法模式(factory method)c++版本

参考大话设计模式中的工厂方法模式/* * factory_method.cpp * * Created on: Jul 21, 2017 * Author: clh01s@163....
  • clh01s
  • clh01s
  • 2017年07月21日 14:42
  • 83

C++工厂方法模式

工厂方法模式(Factory Method Pattern)是一种常用的对象创建型设计模式,此模式的核心思想是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用以及方便...

工厂方法模式 C++描述

#ifndef ANIMAL_H #define ANIMAL_H class Animal { public:     virtual void eat()=0; }; #en...

工厂方法模式 C++实现

工厂方法模式 定义:定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。 适用性: 1、  当一个类不知道它所必须创建的对象的类的时候 2、  当一个类希...

(C++实现)——工厂方法模式(Factory Method Pattern)

工厂方法模式不同于简单工厂模式的地方在于工厂方法模式把对象的创建过程放到里子类里。这样工厂父对象和产品父对象一样,可以是抽象类或者接口,只定义相应的规范或操作,不涉及具体的创建或实现细节。  其...

工厂方法模式demo

  • 2017年01月09日 16:46
  • 25.26MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ 08工厂方法模式
举报原因:
原因补充:

(最多只允许输入30个字)