设计模式读书笔记:Strategy(策略)

原创 2015年07月10日 21:34:41

意图:

定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。

结构图:来自 《23种设计模式 - 郗晓勇》


实现:https://github.com/panshiqu/patterns/tree/master/Strategy

Context

#include <iostream>
#include "Strategy.h"

namespace NS_STRATEGY {

class Context {
public:
	Context() : _strategy(0) {}
	virtual ~Context() {}
	void contextInterface(void)
	{
		int a, b;
		std::cout << "a=";
		std::cin >> a;
		std::cout << "b=";
		std::cin >> b;

		if (_strategy)
			_strategy->algorithmInterface(a, b);
	}

	void setStrategy(Strategy *strategy)
	{
		_strategy = strategy;
	}

private:
	Strategy *_strategy;
};

} /* namespace NS_STRATEGY */
Strategy

namespace NS_STRATEGY {

class Strategy {
public:
	Strategy() {}
	virtual ~Strategy() {}
	virtual void algorithmInterface(int a, int b) = 0;
};

} /* namespace NS_STRATEGY */
ConcreteStrategyA

#include <iostream>
#include "Strategy.h"

namespace NS_STRATEGY {

class ConcreteStrategyA : public Strategy
{
public:
	ConcreteStrategyA() {}
	virtual ~ConcreteStrategyA() {}
	virtual void algorithmInterface(int a, int b)
	{
		std::cout << "a+b = " << a+b << std::endl;
	}
};

} /* namespace NS_STRATEGY */
ConcreteStrategyB

#include <iostream>
#include "Strategy.h"

namespace NS_STRATEGY {

class ConcreteStrategyB : public Strategy
{
public:
	ConcreteStrategyB() {}
	virtual ~ConcreteStrategyB() {}
	virtual void algorithmInterface(int a, int b)
	{
		std::cout << "a-b = " << a-b << std::endl;
	}
};

} /* namespace NS_STRATEGY */
main

#include "Strategy/Context.h"
#include "Strategy/ConcreteStrategyA.h"
#include "Strategy/ConcreteStrategyB.h"
using namespace NS_STRATEGY;
int main(void)
{
	Context c;
	ConcreteStrategyA csa;
	ConcreteStrategyB csb;
	c.setStrategy(&csa);
	c.contextInterface();
	c.setStrategy(&csb);
	c.contextInterface();
}
附加:

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

《HeadFirst设计模式》读书笔记-第1章-策略模式

定义策略模式(strategy pattern)定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户类图代码实现定义飞行/呱呱叫行为的接口,因为飞行行为和呱呱叫行...
  • rex_nie
  • rex_nie
  • 2017年03月05日 10:54
  • 155

《Head First 设计模式》读书笔记之策略模式

正式开始坚持写一些技术博客,我只是一个刚刚踏入计算机行业的菜鸟,能够写的东西也没有多少技术含量,但不管怎样,我已在路上,希望和同样走在这条道路上的小伙伴们共勉。文中的一些观点或是对技术的理解仅仅是建立...
  • ystgx
  • ystgx
  • 2015年01月28日 21:28
  • 277

HeadFirst设计模式_读书笔记_001_策略模式

1.引出策略模式:    Joe上班的公司设计了一款模拟鸭子各种行为的游戏,游戏当中出现了各种各样的鸭子。    鸭子有很多行为,例如:在屏幕上显示、叫、游泳等。    因为有很多种类型的鸭子,...

《大话设计模式》读书笔记:策略模式+反射的Java实现

策略模式(Strategy):定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化不会影响到使用算法的用户。 策略模式是一种定义一系列算法的方法,从概念上看,所有这些算法完成的都...

《Android源码设计模式解析与实战》读书笔记(七)——策略模式

第六章抽象工厂模式实在是不好理解,我觉得也不能似懂非懂就算了,毕竟这次决定第一遍通读起码要搞懂各种设计模式的基本思想,在源码中如何体现都可以等到阅读代码的能力上去了慢慢消化,但是概念什么的,还是不能就...

《大话设计模式》读书笔记之C++实现--chapter2策略模式(商场收费系统)

本文通过一个简单的商场收费系统来理解面向对象的特性(可维护型,可扩展性,可复用性及高灵活性),将父类cashSuper的实收现金的函数定义为虚函数以便其子类cashNormal、cashRebate、...
  • wingWC
  • wingWC
  • 2017年03月30日 09:23
  • 472

大话设计模式读书笔记(二) 策略模式

书中通过一道题目,让"小菜"设计一个商场收银软件,营业员根据客户购买商品的数量及单价,想客户收费。,并且软件可以兼容打折,返点等优惠活动的金额计算。 一开始,小菜使用之前所学的简单工厂模式来制作这个...
  • xsyfl
  • xsyfl
  • 2017年03月30日 21:01
  • 62

《Head First设计模式》读书笔记之策略模式

学习java快一年了,一开始学习java是为了编写android软件,最近花了一个月做出了个android小软件,开发完了才觉得java学的有点不是很牢固,所以想找几本关于java的书看看。前几天上微...

《设计模式之禅》读书笔记-策略模式、享元模式、工厂模式、门面模式混用

前一篇讲的什么是策略模式,策略模式的优缺点,在实际应用中肯定不能这么简单的应用,需要结合其他模式混用。比如结合门面模式解决所有策略类都需要对外暴露的缺点,使用享元模式解决多次创建实例的缺点等。 此篇...

HeadFirst设计模式读书笔记

  • 2008年05月16日 17:20
  • 50KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式读书笔记:Strategy(策略)
举报原因:
原因补充:

(最多只允许输入30个字)