设计模式读书笔记: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();
}
附加:
版权声明:本文为博主原创文章,未经博主允许不得转载。

浅谈JAVA设计模式之——策略模式(Strategy)

一、概述 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。 二、适用性 1.许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为...
  • l1028386804
  • l1028386804
  • 2015年05月09日 14:02
  • 1838

Strategy策略模式和State/Bridge模式的区别

Strategy策略模式 如果系统中某个类的某一行为存在多种实现方式,而且这些实现方式可以互换时使用策略模式。 如果系统中某个类的对象存在多种状态,不同状态下行为有差异,而且这些状态之间可以发生转换...
  • Blues1021
  • Blues1021
  • 2015年09月12日 00:26
  • 975

设计模式之策略(Strategy)模式

Strategy模式是一种行为型设计模式,它将算法一个个封装起来,在某一时刻能够互换地使用其中的一个算法。从概念上看,所有这些算法完成的都是相同的工作,只是实现不同而已。动机在开发中,我们常常会遇到概...
  • lihao21
  • lihao21
  • 2015年08月26日 19:51
  • 2032

Java设计模式——策略模式(Strategy Pattern)

Java设计模式——策略模式(Strategy Pattern) 场景一 描述:刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题,嘿,还别说,真是解决了大问题,...
  • u012401711
  • u012401711
  • 2016年09月07日 21:16
  • 998

C++设计模式<四>:策略模式(Strategy)

1.动机在软件构件过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。2.模式定义定义一系列算法,把它们...
  • MonroeD
  • MonroeD
  • 2016年04月08日 01:16
  • 340

设计模式:策略模式(Strategy)

转自:http://www.cnblogs.com/justinw/archive/2007/02/06/641414.html 前言 万事开头难,最近对这句话体会深刻!这篇文章是这个系列正式开始介...
  • u011630575
  • u011630575
  • 2016年04月13日 23:00
  • 332

设计模式 - 策略模式(Strategy Pattern) 详解

策略模式(Strategy Pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26577879 本文版...
  • u012515223
  • u012515223
  • 2014年05月22日 13:31
  • 2865

我所理解的设计模式(C++实现)——策略模式(Strategy Pattern)

每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。 而策略模式就是对算法进行包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通...
  • LCL_data
  • LCL_data
  • 2013年08月24日 10:59
  • 12715

【APIs — A Strategy Guide】第二章 把API作为你的商业策略

如果你身处技术界, 你不会怀疑API对业务的显著影响,否则,可能有点难以理解为什么API会跟你的业务有关系。在商业领域API每天都在快速增长,本章节的论点应该能帮助不在科技界的人了解API的重要性,同...
  • huawei_eSDK
  • huawei_eSDK
  • 2016年06月20日 10:05
  • 1791

《策略思维》读后感

《策略思维》这本书是迪克西特在1999年写的,作者是一位印度人,整部书读下来,怎么说呢,我的心灵并没有感觉到一丝丝触动,但还是收获了一些知识的,确切的说是巩固了一些知识,更加坚定了自己的一些策略,也印...
  • qdbszsj
  • qdbszsj
  • 2016年01月26日 22:56
  • 4681
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式读书笔记:Strategy(策略)
举报原因:
原因补充:

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