文档章节

设计模式-行为-Strategy(策略)模式

梦想游戏人
 梦想游戏人
发布于 2016/05/03 17:08
字数 295
阅读 32
收藏 0

和Template一样的目的,只不过实现手法是组合 而不是Template模式的继承,解决了继承所带来的弊端。

问题:

    为了给业务逻辑(算法)具体的实现和抽象的接口之间的解耦。

    把算法 (业务逻辑)封装到一个Contex类中通过组合的方式,实现在组合对象中,通过委托的方式将抽象接口的实现委托给组合对象的实现State模式也有类似区别

    定义了一些列的算法,并且封装起来,使他们可以相互替换,策略模式让算法独立于客户的变化而独立变化


#include "PublicHeaders.h"

class Strategy
{
public:
	virtual void AlgrithmInterface() = 0;
};

class ConCreateStrategy :public Strategy
{
public:
	void AlgrithmInterface()override
	{
		cout << __FUNCTION__ << endl;
	}

};
class Contex
{
public:
	Contex(Strategy *strategy)
	{
		this->strategy = strategy;
	}

	void DoAction()
	{
		this->strategy->AlgrithmInterface();
	}
private:
	Strategy*strategy;
};


/**
 * @brief  test function for strategy pattern
 */
void testStrategy()
{
	Contex* contex = new Contex(new ConCreateStrategy);

	contex->DoAction();

}




例2

武器系统

class WeaponStrategy
	{
	public:
		virtual void doFire() = 0;
	};

	class GaTlingGun_Strategy :public WeaponStrategy
	{
	public:
		virtual void doFire()override
		{


		}

	};

	class PistolGun_Strategy :public WeaponStrategy
	{
	public:
		virtual void doFire()override
		{

		}

	};


	class PlayerContex
	{
	public:
		void Fire()
		{
			weapon->doFire();
		}


		void setWeapon(WeaponStrategy *strategy)
		{
			this->weapon = strategy;
		}

		WeaponStrategy*weapon;
	};

	void test()
	{
		PlayerContex*player = new PlayerContex;
		player->setWeapon(new GaTlingGun_Strategy);

		player->Fire();


	}


© 著作权归作者所有

梦想游戏人
粉丝 41
博文 461
码字总数 132517
作品 0
成都
私信 提问
设计模式-Strategy Pattern

一、 策略(Strategy)模式 策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化...

Start-up
2012/05/17
55
0
23种设计模式(12):策略模式

定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。 类型:行为类模式 类图: 策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这些类实现相同的接口,...

LCZ777
2014/07/09
44
0
设计模式之-策略模式(Strategy)

策略模式标准定义:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。 策略(Strategy)模式属于对象的行为模式,通过分析Strat...

wenqi0501
2017/11/30
20
0
刨根问底-struts2应用策略模式(Strategy)分析

定义:基本含义是针对一组算法或者行为特性,将他们抽象到具有共同接口函数的独立抽象类后者接口中,从而使得他们可以相互替换。这样就使得某一个特定的接口行为可以在不影响客户端的情况下发...

cookqq
2013/02/28
520
0
Java程序员从笨鸟到菜鸟之(三十四)大话设计模式(四)策略模式

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 Strategy是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类。 定义...

长平狐
2012/11/12
134
0

没有更多内容

加载失败,请刷新页面

加载更多

重新开始学Java——反射

概念 reflection:自省 反射:镜子可以反射阳光一个java类 或 对象 通过照"镜子"来认知自己 Java语言中是怎么实现照镜子? java.lang.reflect 包 提供了"照镜子"API(应用程序接口) 如果要...

大家都是低调来的
14分钟前
5
0
爬取720万条城市历史天气数据

内容爬虫完毕,校验完毕,缺失信息暂未统计。总数据720万,地区3200个,年份从2011-2019,大小950Mb,原始数据已丢失,需要的朋友可以自己运行脚本挂一晚上。中间遇到了很多坑,有机会我再写...

八音弦
17分钟前
10
0
python的字典类型

1、新建字典 通过键值对 dict_1 = {'a':1,'b':2,'c':3} 通过dict()函数 list_1 = ['adam', 'bob', 'cathy', 'david', 'emma'] list_2 = [1,2,3,4,5] dict_2 = dict(zip(list_1,list_2)) 2、字......

davidwbnu
19分钟前
2
0
springcloud vue.js 前后分离 activiti工作流

本商品为 :springcloud + Springboot 微服务\分布式 工作流 前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架 :springcloud Greenwich.SR1 + springboot 2.1.4 + activiti6.0.0 + ...

java框架开发者
25分钟前
8
0
【jQuery基础学习】07 jQuery表单插件-Form

本文转载于:专业的前端网站➦【jQuery基础学习】07 jQuery表单插件-Form 作用:jQuery Form插件的作用是为了让我们可以很方便地用ajax的方式提交表单,从而使我们提交表单的时候页面不用进行...

前端老手
34分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部