策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。


有点类似于我们玩是 CS 枪战,不管你用 1 机枪 2 手枪 3小刀 4 手雷 ,到角色身上的永远是一个字干,点击鼠标左键,老夫写代码上去就是一梭子,不管你怎么实现的.

接下来我将会用 C++ 代码去模拟我们玩 CS 过程中 武器 (策略) 角色之间的关系
#include <iostream>
using namespace std;
///武器类
class Weapon {
public:
virtual void use() = 0;
};
///小刀类
class Knife : public Weapon {
public :
void use() {
cout<<"use knife kill you" << endl;
}
};
///机枪类
class Gun : public Weapon {
public:
void use() {
cout<<"use gun kill you"<<endl;
}
};
///角色类
class Sprite {
public:
///人物一开始就有把抢
Sprite(Weapon *we) {
_weapon = we;
}
///切换武器
void setWeapon(Weapon *we) {
_weapon = we;
}
///老夫写代码上去就是一梭子 一个字干
void fight() {
_weapon->use();
}
private :
Weapon *_weapon;
};
int main(int argc, char *argv[])
{
Knife k;
Gun g;
Sprite sp = Sprite(&g);
sp.fight();
sp.setWeapon(&k);
sp.fight();
sp.setWeapon(&g);
sp.fight();
return 0;
}

iOS 中NSArray的 sortedArrayUsingComparator 排序方法其实就是一种策略模式

定义了一个公共的接口, 根据业务场景需要 传不同的策略进来,就会实现升序 ,降序 ,甚至是逆置数组元素等不同的操作.
网友评论