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

策略模式是一种定义一系列算法的方法,从概念上来讲,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方法调用所有的算法,减少各种算法类与使用算法类之间的耦合。

策略模式的 strategy (COperate)类层为 context 定义了一些了可供重用的算法或者行为,继承有助于析取这些算法中的公公功能。

策略模式简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。

每个算法可以保证自身没有错误 ,修改其中的一个不会影响到其他算法。

测试代码如下:

//Stra_Fact.h

//策略基类
class COperation
{
public:
	int number_a;
	int number_b;

public:
	virtual double GetResult();
};

//策略具体类—加法类
class AddOperation : public COperation
{
public:
	//构造函数
	AddOperation(int num_a,int num_b);
	virtual double GetResult();
};

//策略具体类—减法类
class SubOperation : public COperation
{
public:
	//构造函数
	SubOperation(int num_a,int num_b);
	virtual double GetResult();
};

//策略具体类—求余类
class RemOperation : public COperation
{
public:
	//构造函数
	RemOperation(int num_a,int num_b);
	virtual double GetResult();
};

//上下文,用一个基类来配置
class Context
{
private:
	COperation* op;
public:
    Context(int num_a, int num_b, char sign);
	double GetResult();
};
//Stra_Fact.cpp

#include "Stra_Fact.h"

//策略基类方法实现
double COperation::GetResult()
{
	double result = 0;
	return result;
}

//策略加法类--构造函数
AddOperation::AddOperation(int num_a,int num_b)
{
	number_a = num_a;
	number_b = num_b;
}
//策略加法类--父类方法重写
double AddOperation::GetResult()
{
	return number_a + number_b;
}

//策略减法类--构造函数
SubOperation::SubOperation(int num_a,int num_b)
{
	number_a = num_a;
	number_b = num_b;
}
//策略减法类--父类方法重写
double SubOperation::GetResult()
{
	return number_a - number_b;
}

//策略求余类--构造函数
RemOperation::RemOperation(int num_a,int num_b)
{
	number_a = num_a;
	number_b = num_b;
}
//策略求余类--父类方法重写
double RemOperation::GetResult()
{
	return number_a % number_b;
}

//上下文,用一个基类来配置
Context::Context(int num_a, int num_b, char sign)
{
	op = new COperation;
    switch(sign)
	{
	case '+':
		{
			AddOperation * temp = new AddOperation(num_a,num_b);
			op = temp;
			break;
		}
	case '-':
		{
			SubOperation * temp = new SubOperation(num_a,num_b);
			op = temp;
			break;
		}
	case '%':
		{
			RemOperation * temp = new RemOperation(num_a,num_b);
			op = temp;
			break;
		}
	}
}
double Context::GetResult()
{
	return op->GetResult();
}
//user.h

#include "iostream"
#include "Stra_Fact.h"

using namespace std;

//客户端
int main()
{
    int num_a, num_b;
	char sign;
	cout<<"put your first number : ";
    cin>>num_a;
	cout<<"put your second number : ";
	cin>>num_b;
	cout<<"put your sign : ";
    cin>>sign;

	Context * context = new Context(num_a, num_b, sign);
	cout<<context->GetResult()<<endl;

     return 0;
}
时间: 2024-10-10 04:32:28

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

设计模式学习(1) --- 3类工厂模式

   讲个故事吧.从前一个老板非常有钱,非常喜欢数码产品手机,经常喜欢买智能手机,那么怎么买?当然,可以自己去各个手机店买,比如去苹果店,三星店买.但是老板是非常忙的,怎么办?老板是程序员出生.面向对象嘛.加个层次,叫秘书去买,把要买的型号,写张纸条给秘书即可.为什么这样做,对老板来说当然省事了,直接窃取秘书的劳动成果即可(因为付薪水了嘛).秘书根据老板的指示去做,要买什么牌子手机就去相应的专卖店买即可.OK,这样应付了一段时间,因为这个时期智能手机刚刚兴起,也就几家可以做. 时光飞逝,岁月如梭

&lt;C/C++ 版&gt; 设计模式 学习之 策略模式

策略模式(strategy):它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的用户. 在下面的情况下应当考虑使用策略模式: 1. 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为. 2. 一个系统需要动态地在几种算法中选择一种.那么这些算法可以包装到一个个的具体算法类里面,而这些具体算法类都是一个抽象算法类的子类.换言之,这些具体算法类均 有统一的接口,由于多态性原则,客户端可

PHP设计模式学习笔记: 责任链模式(Chain of Responsibility)

// 抽象书本类 abstract class AbstractBookTopic { abstract function getTopic(); abstract function getTitle(); abstract function setTitle($title_in); } // 书本类,继承自抽象书本类 class BookTopic extends AbstractBookTopic { private $topic; private $title; function __co

设计模式学习08:享元模式

设计模式学习08:享元模式 参考资料 https://www.jianshu.com/p/a2aa75939766 https://www.cnblogs.com/adamjwh/p/9070107.html 简介 Use sharing to support large numbers of fine-grained objects efficiently. 使用共享对象可有效地支持大量的细粒度的对象. 享元模式(Flyweight)又称为 轻量级模式,它是一种对象结构型模式. 面向对象技术可

设计模式(2)----简单工厂模式

说明一下: 简单工厂模式不属于23种GOF设计模式之一,我之所以写出来,是应为简单工厂模式是工厂模式的基础,23种中的工厂方法模式是从中衍生的. 简介: 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 简单工厂UML图: 组成: 简单工厂模式由三部分组成,具体工厂,具

设计模式(3)抽象工厂模式(Abstract Factory)

设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 源码地址 0 抽象工厂模式简介 0.0 抽象工厂模式定义 抽象工厂模式一般的书面定义为:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类 提供创建接口,无需指定具体实现类,这个原则在简单工厂模式和工厂方法模式篇已经反复讲到了,这是面向接口编程的一个基本准则,很显然,从抽象工厂模式的一般定义中可以看出这也是抽象工厂模式的一个核心,而抽象工厂模式的另

设计模式(一)——简单工厂模式

嵌入式linux 设计模式(一)--简单工厂模式 一.简单工厂模式简介 1.简单工厂模式 简单工厂模式(Factory Method Pattern)是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 简单工厂模式的UML类图 工厂角色(Creator):是简单工厂模式的核心,由它负责创建所有的类的内部逻辑.工厂类必须能够被

设计模式(二): 工厂模式

工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象. 介绍 意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行. 主要解决:主要解决接口选择的问题. 何时使用:我们明确地计划不同条件下创建不同实例时. 如何解决:让其子类实现工厂接口,返回的

(转)设计模式(五)简单工厂模式+工厂方法模式

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象. 在这些情况,新对象的建立就是一个 “过程”,不仅是一个操作,像一部大机器中的一个齿轮传动. 模式的问题:你如何能轻松方便地构造对象实例,而不必关心构造对象实例的细节和