移动开发作家群(719776724)分享专题iOS开发

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

2018-06-14  本文已影响43人  大兵布莱恩特

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

image.png image.png

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

image.png

接下来我将会用 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;
}



image.png

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

image.png

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

上一篇 下一篇

猜你喜欢

热点阅读