策略模式 Strategy模式
来源:互联网 发布:windows 10 rs1 编辑:程序博客网 时间:2024/04/29 17:04
Strategy模式:
定义了算法家族,分别封装起来,让它们之间可以互相替换。
基本特点:
a)根据不同的情况,创建不同的对象
b)每个对象方法名相同,方法的实现差别很大
组成:
1个抽象策略;
n个具体策略(封装了相关的算法)
1个调度类,它拥有一个策略类的引用
代码例子:
// Strategy.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>using namespace std;/************************************************************************//* Stragey模式就是将算法封装到一个类里面,然后在调用类里面调用这个类 *//************************************************************************//*weaponStrategy类,是所有武器的基类,也就是所有算法的公共接口*/class weaponStrategy{public:virtual void attack() = 0;};//下面就是三个具体的算法class arrow : public weaponStrategy{public:virtual void attack(){cout<<"我的武器是绿箭侠的绿箭"<<endl;}};class sword : public weaponStrategy{public:virtual void attack(){cout<<"我的武器是张无忌的倚天剑"<<endl;}};class knife : public weaponStrategy{public:virtual void attack(){cout<<"我的武器是萧十一郎的割鹿刀"<<endl;}};/*策略模式所用的就是 聚合 的思想,简单点来说就是一个类中A定义另外一个类的对象B,然后通过B实现本应该在A当中实现的功能*/class soldierContext{public:soldierContext(weaponStrategy* weapon){this->pWeapon = weapon;}void DoAction(){pWeapon->attack();}~soldierContext(){delete pWeapon;}private:weaponStrategy* pWeapon;};//策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,//它可以以相同的方式调用所有的算法,减少了各种算法类于使用算法类之间的耦合。int _tmain(int argc, _TCHAR* argv[]){/*使用弓箭还是割鹿刀还是倚天剑,这三个武器相当于三个策略A、B、C,下面三个策略可以互相转化*/weaponStrategy* pWeapon = new arrow();soldierContext* pSolider = new soldierContext(pWeapon);pSolider->DoAction();pWeapon = new knife();//转化到割鹿刀策略pSolider = new soldierContext(pWeapon);pSolider->DoAction();pWeapon = new sword();//转化到倚天剑策略pSolider = new soldierContext(pWeapon);pSolider->DoAction();getchar();return 0;}
简单工厂模式与策略模式的区别:
简单工厂模式注重不同对象的创建,比如动物类,创建猫类,狗类;
策略模式注重的是多个对象的相同行为,比如上面都是电影DoAction()行为,但是里面的算法实现细节不同。
(说实话,现在要让自己选择用一个还是不太清除怎么选择,估计以后用的情况多了就明白了,现在只要先理解策略模式的样式就好了)
1 0
- 策略模式 Strategy模式
- Strategy模式 策略模式
- 策略模式(Strategy模式)
- 策略模式(Strategy Pattern)
- Strategy策略模式
- 策略(Strategy)模式
- Strategy策略模式
- 策略(Strategy)模式
- 策略模式(Strategy Pattern)
- 策略模式 Strategy Pattern
- 策略模式(Strategy Pattern)
- 策略模式(Strategy)
- HeadFirst Strategy策略模式
- 策略模式(Strategy Pattern)
- Strategy Pattern (策略模式)
- 泛化策略模式(Strategy)
- Strategy 策略模式
- Strategy 策略模式
- Xcode 6制作动态及静态Framework
- Android 属性动画(Property Animation) 完全解析 (下)
- sobel 边缘检测算法
- Linux命令详解(二)系统管理命令
- spring aop 事务配置
- 策略模式 Strategy模式
- KMP
- Linux共享库路径配置
- iOS APP高效开发的弹药库——最新必备开源库 一
- Android viewpager在scrollview中的滚动问题
- 电子齿轮(比)、编码器初探
- 走马观花之TCP/IP
- 带姓名的成绩单
- Javascript定义类(class)的三种方法