文档章节

设计模式之行策略模式 C++

孤行雪影
 孤行雪影
发布于 2014/05/16 20:19
字数 206
阅读 20
收藏 0
头文件:
#include <exception>

namespace calc
{
	/*****************************************/
	class IOperation
	{
	public:
		IOperation() :
			numberA(0), numberB(0)
		{}
	public:
		virtual double compute() = 0;
	public:
		double numberA;
		double numberB;
	};
	/*****************************************/
	class COperationAdd : public IOperation
	{
	public:
		COperationAdd() :
			IOperation()
		{}
	public:
		virtual double compute()
		{
			return numberA + numberB;
		}
	};
	/******************************************/
	class COperationSub : public IOperation
	{
	public:
		COperationSub() :
			IOperation()
		{}
	public:
		virtual double compute()
		{
			return numberA - numberB;
		}
	};
	/******************************************/
	class COperationMul : public IOperation
	{
	public:
		COperationMul() :
			IOperation()
		{}
	public:
		virtual double compute()
		{
			return numberA * numberB;
		}
	};
	/*****************************************/
	class COperationDiv : public IOperation
	{
	public:
		COperationDiv() :
			IOperation()
		{}
	public:
		virtual double compute()
		{
			if (numberB == 0)
			{
				throw new std::exception("除数不能为零!");
				return 0;
			}
			else
				return numberA / numberB;
		}
	};
	/*******************************************/

	enum class Operate{ add, sub, mul, div };

	static IOperation* createOperator(Operate operate)
	{
		IOperation *oper = nullptr;
		switch (operate)
		{
		case Operate::add:
			oper = new COperationAdd();
			break;
		case Operate::sub:
			oper = new COperationSub();
			break;
		case Operate::mul:
			oper = new COperationMul();
			break;
		case Operate::div:
			oper = new COperationDiv();
			break;
		default:
			break;
		}
		return oper;
	}
}

测试文件:

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

int main()
{
	IOperation *oper = nullptr;
	oper = calc::createOperator(calc::Operate::mul);

	oper->numberA = 8;
	oper->numberB = 5;
	cout << setw(4) << oper->numberA << " * " << oper->numberB << " = " << oper->compute() << endl;

	delete oper;

	system("pause");
	return 0;
}


© 著作权归作者所有

孤行雪影
粉丝 0
博文 1
码字总数 206
作品 0
三亚
程序员
私信 提问
大家一起来说一说自己掌握的设计模式

做了比较多的通讯和SDK,虽然是用C++,但是SDK对外的都是C的接口,而且项目中主要是消息封装,socket IO模型和多线程, 消息收发,业务比较少,所以用的OOP也比较少,用了很多年C++,却一直没有...

沉淀岁月
2013/09/10
205
0
Android 网络编程 目录

Android 网络编程 目录 Android 网络编程1 Http协议 Android 网络编程2 Okhttp缓存机制 Android 网络编程3 Java NIO to be continued... Android 架构师之路 目录 Android 架构师之路1 UML图...

香沙小熊
2018/06/21
0
0
为什么工厂模式是华而不实的——浅谈工厂模式的利与弊

转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/17428923 说明:博主虚心接受大家的抨击,批评,指正 前言 我一直想介绍下工厂模式,我曾经搞过J2EE,用的是轻量级S...

长平狐
2013/12/25
1K
0
Cocos2d-x设计模式--二段构建模式

设计模式在程序设计中会经常用到,也许你从来没有留意过设计模式,其实你却一直在使用设计模式!cocos2dx中有不少的设计模式,所以从本篇博客开始探讨一下cocos2dx中的设计模式,看看引擎都使...

_子墨
2014/09/15
239
0
设计模式之简单工厂模式学习

学习C++有一两年了,面向对象思想也有所接触。使用过MFC以及OSG类库进行过开发,无非就是调用别人设计好的类库,要说自己使用面向对象的思想去开发程序,这个还真没有。 意识到自己在这方面的...

长平狐
2012/10/08
61
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
697
10
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
39
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
25
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
74
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
73
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部