文档章节

24种设计模式学习记录第三篇

没有脚的大笨鸟
 没有脚的大笨鸟
发布于 2014/03/30 16:00
字数 502
阅读 347
收藏 8

上次的代码封装的还不是很好,如果增加开方算法时,其它的算法也能被看到,如果以前的代码被误改了呢,这样不好~

这次主要对上次的代码进行改进。

                现在请出主角24种模式中的第一种模式-----------“简单工厂模式“                  

我们会想到把每种运算封装成一个单独的类,这样就可以降低耦合程度,修改一个不会看到另一个。但是问题来了,到底实例化哪个类? 将来会增加哪些类?这些都很容易发生变化,所以应该考虑一个单独的类来做这个创造实例的过程,从来以不变应万变,这就是所谓的工厂。

------------------------------------------------------------------------------------------------------------------

    MD,我怒了,买了本设计模式是用c#写的,本来c++就不好,还要做这种转换,有不对的地方欢迎指正~~~

-----------------------------------------------------------------------------------------------------------------

#include<iostream>

using namespace std;

class Operator
{
public:
	Operator(double num1,double num2):m_num1(num1),m_num2(num2){}
	virtual double GetValue(void)
	{
		double value = 0;
		return value;
	}
	double GetNum1(void)
	{
		return m_num1;
	}
	double GetNum2(void)
	{
		return m_num2;
	}
private:
	double m_num1,m_num2;
};

class OperatorAdd:public Operator
{
public:
	OperatorAdd(double num1,double num2):Operator(num1,num2){}
	double GetValue(void)
	{
		return GetNum1() + GetNum2();
	}

};

class OperatorSub:public Operator
{
public:
	OperatorSub(double num1,double num2):Operator(num1,num2){}
	double GetValue(void)
	{
		return GetNum1() - GetNum2();
	}
};

class OperatorMul:public Operator
{
public:
	OperatorMul(double num1,double num2):Operator(num1,num2){}
	double GetValue(void)
	{
		return GetNum1() * GetNum2();
	}
};

class OperatorDiv:public Operator
{
public:
	OperatorDiv(double num1,double num2):Operator(num1,num2){}
	double GetValue(void)
	{
		return GetNum1() / GetNum2();
	}
};

class OperationFactory
{
public:
	Operator* CreateOperator(double num1,double num2, char op)
	{
		Operator *oper = NULL ;
		switch(op)
		{
		case '+':
			oper = new OperatorAdd(num1,num2);
			break;
		case '-':
			oper = new OperatorSub(num1,num2);
			break;
		case '*':
			oper = new OperatorMul(num1,num2);
			break;
		case '/':
			oper = new OperatorDiv(num1,num2);
			break;
		}
		return oper;
	}
	
};


int main(void)
{
	int num1,num2;
	char op;
	Operator *cal = NULL;
	OperationFactory factory;
	cout << "please input num1" << endl;
	cin  >> num1;
	cout << "please input num2" << endl;
	cin  >> num2;
	cout << "please input the operator" << endl;
	cin >> op;
	cout << num1 << " " << op << " "  << num2 << " " << "=" << " ";
	
	cal = factory.CreateOperator(num1,num2,op);
	cout << cal->GetValue() << endl;	
	return 0;

}




© 著作权归作者所有

共有 人打赏支持
没有脚的大笨鸟
粉丝 5
博文 11
码字总数 5230
作品 0
浦东
程序员
设计模式之禅(第2版).epub

【下载地址】 本书是设计模式领域公认的3本经典著作之一,“极具趣味,容易理解,但讲解又极为严谨和透彻”是本书的写作风格和方法的最大特点。第1版2010年出版,畅销至今,广受好评,是该领...

winter730
05/16
0
0
设计模式笔录(二),设计模式有哪些

本人出道5年,学习、编程、再学习、再编程一路走过,只是在笔和纸留下些脚印,实感惭愧。现开始把自己学习到的心得,实践中的体会,一一贴在互联网上,大家互相学习、探讨,寻找一些技术朋友...

方旭
2011/03/31
0
0
(目录)设计模式(可复用面向对象软件的基础)

本系列“设计模式”博客使用Golang语言实现算法。所谓算法是指解决一个问题的步骤,个人觉得不在于语言。小弟只是最近学习Golang,所以顺带熟练一下语法知识,别无它意。 本系列博客主要介绍...

chapin
2015/01/13
0
0
java设计模式-- 单例模式

在很久之前,也就是在大二暑假的时候,那时候看马士兵的视频教程中有提到很多的设计模式。 java的设计模式大致可以分为3大类,23种设计模式。 其中,创建型模式有5种:单例模式、建造者模式、...

爱学习的逃课君
2014/11/27
0
0
系统架构技能之设计模式-单件模式

一、开篇 其实我本来不是打算把系统架构中的一些设计模式单独抽出来讲解的,因为很多的好朋友也比较关注这方面的内容,所以我想通过我理解及平时项目中应用到的一 些常见的设计模式,拿出来给...

wbf961127
2017/11/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

最全最强解析:支付宝钱包系统架构内部剖析(架构图)

支付宝系统架构概况 典型处理默认 资金处理平台 财务会计 支付清算 核算中心 交易 柔性事务 支付宝的开源分布式消息中间件–Metamorphosis(MetaQ) Metamorphosis (MetaQ) 是一个高性能、高可...

晨猫
35分钟前
4
0
竞品分析

那什么样的场景需要用关键纬度分析法分析竞品呢? 竞品分析的目的是为了看竞品们和自己产品重合的业务都具备哪些功能点,以及这些功能是怎么做的,以此确定自己产品的优化方向。 竞品们的业务...

于谦老师
43分钟前
1
0
OSChina 周三乱弹 —— 公司女同事约我

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子:分享水木年华的单曲《蝴蝶花(2002年大提琴版)》 《蝴蝶花(2002年大提琴版)》- 水木年华 手机党少年们想听歌,请使劲儿戳(这里) ...

小小编辑
今天
1K
16
Linux环境搭建 | VMware下共享文件夹的实现

在进行程序开发的过程中,我们经常要在主机与虚拟机之间传递文件,比如说,源代码位于虚拟机,而在主机下阅读或修改源代码,这里就需要使用到 「共享文件」 这个机制了。本文介绍了两种共享文...

良许Linux
今天
9
0
JUC锁框架——AQS源码分析

JUC锁介绍 Java的并发框架JUC(java.util.concurrent)中锁是最重要的一个工具。因为锁,才能实现正确的并发访问。而AbstractQueuedSynchronizer(AQS)是一个用来构建锁和同步器的框架,使用A...

长头发-dawn
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部