设计模型之二策略模式

//strategy model
//策略模式是一种定义一系列算法的方法
#include<iostream>

using namespace std;

//一个抽象的策略类
class Strategy{
public:
	virtual void algorithmInterface()=0;
};

//三种不同策略
class StrategyA:public Strategy{
	void algorithmInterface()
	{
		cout<<"A strategy"<<endl;
	}
};

class StrategyB:public Strategy{
	void algorithmInterface()
	{
		cout<<"B strategy"<<endl;
	}
};

class StrategyC:public Strategy{
	void algorithmInterface()
	{
		cout<<"C strategy"<<endl;
	}
};

//维护一个具体策略,具体策略由用户指定
class StrategyContext{
public:
	StrategyContext(char X)
	{//根据用户需要创建策略类
		switch(X)
		{//这里其实就是一个简单工厂模式,实例化一个具体对象
			case 'A':
				stra=new StrategyA();
				break;
			case 'B':
				stra=new StrategyB();
				break;
			case 'C':
				stra=new StrategyC();
				break;
			default:
				break;
		}
	}

	void getResult()
	{//根据选择的策略得出结果
		stra->algorithmInterface();
	}

private:
	Strategy* stra;
	//基类指针,用于指向一个具体的子对象
	//这里曾出现过一个编译问题:如果子类是私有继承或保护继承自基类,则基类指针不能指向子类对象,具体原因不明
};

int main()
{
	//客户端只需要知道一个StrategyContext类就可以,而不需要知道其他策略类
	StrategyContext straContxt('B');
	straContxt.getResult();
	return 0;
}
时间: 2024-08-07 00:08:19

设计模型之二策略模式的相关文章

领域驱动系列二策略模式的应用

一.简介 随着模型的不断扩大,发现模型中不单单只有"名词",还有许多"谓词",简言之,就是领域知识中,会参杂者许多的业务规则,他们和实体一样,都扮演者领域模型中的核心角色. 所以我们在建立领域模型的时候,不单单只关注实体和值对象,业务规则也被纳入到了领域模型中,如果业务规则变化不频繁,我们可以使用硬编码来解决,但是实际开发中业务规则的变化往往是变化的非常频繁的.当然你可以使用大量的If else来解决这个问题,但是这种代码是很难维护的.而且会影响原先的业务,所以这个

二 策略模式

策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合 策略模式封装了变化 在实践中,我们发现可以用它来封装几乎任类型的规则,只要在分析过程中听到需要在不同时间应用到不同的业务规则,就考虑使用策略模式来处理这种变化的可能 商场促销例子 现金收费抽象类 using System; using System.Collections.Generic; using System.Linq;

简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别

结合简单示例和UML图,讲解工厂模式简单原理. 一.引子 话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰).Bmw(宝马).Audi(奥迪)),还雇了司机为他开车.不过,爆发户坐车时总是这样:上Benz车后跟司机说"开奔驰车!",坐上Bmw后他说"开宝马车!",坐上 Audi后他说"开奥迪车!".你一定说:这人有病!直接说开车不就行了?!而当把这个爆发户的行为放到我们程序语言中来,我们发现C语言一直是通过这种方式来坐车的!幸运的是这种有

设计模式之_简单工厂模式、工厂方法模式、抽象工厂模式 、策略模式、策略与工厂的区别(转)

一.前言 话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰).Bmw(宝马).Audi(奥迪)),还雇了司机为他开车.不过,爆发户坐车时总是这样:上Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“开宝马车!”,坐上 Audi后他说“开奥迪车!”.你一定说:这人有病!直接说开车不就行了?!而当把这个爆发户的行为放到我们程序语言中来,我们发现C语言一直是通过这种方式来坐车的 幸运的是这种有病的现象在OO语言中可以避免了.下面以Java语言为基础来引入我们本文的主题:工厂模式! 二.简介

(12)策略模式

 定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换. 类型:行为类模式 类图: 策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这些类实现相同的接口,相互之间可以替换.在行为类模式中,有一种模式也是关注对算法的封装--模版方法模式,对照类图可以看到,策略模式与模版方法模式的区别仅仅是多了一个单独的封装类Context,它与模版方法模式的区别在于:在模版方法模式中,调用算法的主体在抽象的父类中,而在策略模式中,调用算法的主体则是封装到了封装类Context中,抽

研磨设计模式之策略模式

策略模式(Strategy) 1  场景问题 1.1  报价管理 向客户报价,对于销售部门的人来讲,这是一个非常重大.非常复杂的问题,对不同的客户要报不同的价格,比如: (1)对普通客户或者是新客户报的是全价 (2)对老客户报的价格,根据客户年限,给予一定的折扣 (3)对大客户报的价格,根据大客户的累计消费金额,给予一定的折扣 (4)还要考虑客户购买的数量和金额,比如:虽然是新用户,但是一次购买的数量非常大,或者是总金额非常高,也会有一定的折扣 (5)还有,报价人员的职务高低,也决定了他是否有权

设计模式(1)--简单工厂模式、策略模式

1. 简单工厂模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 先放图再解释.下图一是从<大话设计模式>中摘出来的.问题是:用任意一种面向对象语言实现一个计算器控制台程序,要求输入两个数和运算符号,得到结果. 简单工厂模式实现的关键点有两个: 1. 继承:定义一个抽象父类“抽象产品”(Operation类

23种设计模式(12):策略模式

定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换. 类型:行为类模式. 类图: 策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这些类实现相同的接口,相互之间可以替换.在前面说过的行为类模式中,有一种模式也是关注对算法的封装——模版方法模式,对照类图可以看到,策略模式与模版方法模式的区别仅仅是多了一个单独的封装类Context,它与模版方法模式的区别在于:在模版方法模式中,调用算法的主体在抽象的父类中,而在策略模式中,调用算法的主体则是封装到了封装类Context

计算器软件的代码实现 (策略模式)

一 封装时策略模式的书写 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace shuxuefudao { class qita { public void qingkong() { File.WriteAllText("writer.txt", string.Empty); File.WriteAllText(&q