<C/C++ 版> 设计模式 学习之 工厂模式 <2>

下面代码实现的功能是简单工厂模式:

声明一个工厂类,其成员可以看做该工厂的主要产品类型。

再声明几个子工厂类,根据客户要求生产不同类型的产品。

若要增加新产品,只需声明新的工厂子类即可。

代码如下:

//Factory.h

#ifndef FACTORY_H
#define FACTORY_H

//计算类
class COperate
{
public:
	COperate(void);
	COperate(float num_a, float num_b);
	virtual float GetResult();	

public:
	static float number_a;
	static float number_b;
};

//计算子类--加
class COperate_Add:public COperate
{
public:
	virtual float GetResult();
};

//计算子类--减
class COperate_Sub:public COperate
{
public:
	virtual float GetResult();
};

//计算子类--乘
class COperate_Mul:public COperate
{
public:
	virtual float GetResult();
};

//计算子类--除
class COperate_Div:public COperate
{
public:
	virtual float GetResult();
};

//计算工厂类
class COperateFactory
{
public:
	static COperate * CreateOperate(char operate_sign);
};

#endif
//Factory.cpp

#include "Factory.h"

float COperate::number_a = 0;
float COperate::number_b = 0;

//默认的构造函数
COperate::COperate(void)
{
	//number_a = 0;
	//number_b = 0;
}

COperate::COperate(float num_a, float num_b)
{
	number_a = num_a;
	number_b = num_b;
}

float COperate::GetResult()
{
	float result = 0;
	return result;
}

//计算子类
float COperate_Add::GetResult()
{
	float result = 0;
	result = number_a + number_b;
	return result;
};

float COperate_Sub::GetResult()
{
	float result = 0;
	result = number_a - number_b;
	return result;

};

float COperate_Mul::GetResult()
{
	float result = 0;
	result = number_a * number_b;
	return result;
};

float COperate_Div::GetResult()
{
	float result = 0;
	result = number_a / number_b;
	return result;
};

COperate * COperateFactory::CreateOperate(char operate_sign)
{
	COperate * ope = 0;

	switch(operate_sign)
	{
	case '+':
		{
			ope = new COperate_Add;
			break;
		}
	case '-':
		{
			ope = new COperate_Sub;
			break;
		}
	case '*':
		{
			ope = new COperate_Mul;
			break;
		}
	case '/':
		{
			ope = new COperate_Div;
			break;
		}
	}

	return ope;
}
//User.cpp --- 客户端

#include "Factory.h"
#include "iostream"

int main()
{
	using namespace std;

	float num_a, num_b;
	char ope_sign;

	cout<<"Input First Number : ";
	cin>>num_a;

	cout<<"Input Second Number : ";
	cin>>num_b;

	cout<<"Input Operate sign : ";
	cin>>ope_sign;

	COperate * myOpera = new COperate(num_a, num_b);
	myOpera = COperateFactory::CreateOperate(ope_sign);
	float result = myOpera->GetResult();

	cout<<"Result is : "<<result<<endl;
}
时间: 2024-11-10 01:07:21

<C/C++ 版> 设计模式 学习之 工厂模式 <2>的相关文章

&lt;C/C++ 版&gt; 设计模式 学习之 工厂模式 &lt;1&gt;

大话设计模式这本书使用 C# 语言写的,我用的是 C++ 语言,最近在看这本书,所以用 C++ 语言走了一遍. 以下是部分笔记,包括代码 若不涉及面向对象这个概念,我们写的简易计算器可能是下面这个样子 //User.cpp --- 客户端 #include "iostream" int main() { using namespace std; cout<<"Input First Number : "; int number_a; cin>>

设计模式学习02—工厂模式

1.动机与定义 我们在程序中使用一个对象时,需要new一下,如果需要设置其他值就再初始化一下.比如我要使用一个按钮,手动new一个矩形按钮,然后初始化一些值,如显示文字,背景色等. // 矩形按钮 IButton btn = new RecButton(); // 初始化其他值 btn.setText("提交"); btn.setBackgroundColor("#00aaff"); // 其他初始化省略 // 圆形按钮 IButton btn2 = new Rou

设计模式学习之--工厂模式

今天学习的设计模式是工厂模式.那么为什么叫它工厂模式呢?工厂模式,顾名思义就是用一个工厂生产各种东西,工厂模式是如何体现的呢? 首先,工厂模式有简单的工厂模式和抽象工厂模式两种,我们先用一个发型的工厂来演示一下简单的工厂模式: 一个发型接口:工厂模式是面向接口编程的,这样可以更易于程序的扩展 package com.sunny.project; /** * 发型接口 * @author Administrator * */ public interface HairInterface { /**

设计模式学习笔记-工厂模式

一.概述 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法(Factory Method)使一个类的实例化延迟到其子类: 2.模式中的角色 Product(Map):定义工厂方法所创建的对象的接口. ConcreteProduct(BaiduMap.GaodeMap):具体Product,实现Product接口. Creator(IMapFactory):声明工厂方法,该方法返回一个Product类型的对象. ConcreteCreator(BaiduMapFactory.Gaod

设计模式学习——简单工厂模式

模式概述:专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类,简单工厂(Simple Factory)模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,但其不属于23种GOF设计模式之一,通常它根据自变量的不同返回不同的类的实例.     UML类图: 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建出哪一个产品类的实例.由上图可以看出,简单工厂模式有工厂.抽象产品.具体产品三个角色. 工厂角色(Factory) 是

设计模式学习之工厂模式[转]

工厂模式笔记 摘自http://blog.csdn.net/wuzhekai1985 软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径.设计模式中运用了面向对象编程语言的重要特性:封装.继承.多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累.最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解.主要参考<大话设计模式>和<设计模式:可复用面向对象软件的基础>两本书.本文介绍工厂模式的实现. 工厂模式属于创建型模式,大致可以分

Java设计模式学习三-----工厂模式

工厂模式 工厂模式(Factory Pattern)是Java中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象. 工厂模式的思路:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行.使用过程中做好接口选择. 优点:1.一个调用者向创建一个对象,只要知道名称就可以了.2.扩展性高,如果想增加一个产品,只要扩展一个工厂

设计模式学习-简单工厂模式

1.什么是简单工厂模式 简单工厂模式属于类的创建模式,又叫做静态工厂模式,是通过专门建立一个类负责创建其他类的实例,被创建的类通常有着共同的父类,之所以称之为工厂,就是因为负责创建其他类的类能够根据传递参数的不同,产生不同的实例,使得程序满足松耦合.重用度高.易修改维护的特点. 2.简单工厂模式的实现 下面举例说明工厂模式,比如说我们要实现一个两个数的size运算,那么如何去设计能过做到我们上面说的特性.首先我们要设定一个运算的终极父类: #include <iostream> #includ

(@WhiteTaken)设计模式学习——抽象工厂模式

抽象工厂模式,可以向客户端提供一个接口,而客户端不用指定具体的类型创建对象,却能够创建多个产品族(一类具有共性产品,如地域等)的对象. 下面直接上代码. 1.苹果需要实现水果的接口,而苹果可以有北方的苹果,也可以有南方的苹果,所以也可以抽象成一个父类. 1 public interface Fruit { 2 public void Get(); 3 } 4 5 public abstract class Apple implements Fruit{ 6 public abstract voi