最新消息:想得多,做的少。一天到晚瞎鸡巴搞。

策略模式

瞎扯设计模式 阿虚 525浏览 0评论

.     学习完这个设计模式在如何用自己的话语来描述策略模式让我想起的就是角色扮演类游戏中控制的人物。如:掉线城的300勇士、外挂岛和禽兽世界以及各类型的网络游戏。因为这些控制的人物都需要“带装备”,不同的装备攻击力和附带属性又不相同等等。将游戏人物装备带入我觉得能让我更加理解这个策略模式。 “因为你无法知道下秒时玩家准备拿的是什么样的装备”。(在控制的人物中所带的装备使用了策略模式。当然并非游戏控制角色代码真用的这个,这只是比方。)

.     将策略模式带入游戏角色:就是讲每件装备定义为不同的部件。如头盔就定义一个头盔类,武器就定义一个武器类。然后游戏中所有存在的武器,头盔全部都继承头盔类,武器类。

class Arms
{
public:
    Arms(){};
    virtual ~Arms(){};
    virtual Show() = 0;
};

class JueShiHaoJian : public Arms
{
public:
    JueShiHaoJian(){};
    virtual ~JueShiHaoJian(){};

    virtual Show()
    {
        printf("绝世好剑 \r\n");
    }
};

class XueYinKuangDao : public Arms
{
public:
    XueYinKuangDao(){};
    virtual ~XueYinKuangDao() {};

    virtual Show()
    {
        printf("血饮狂刀 \r\n");
    };
};

.     人物类中就定义装备部件类的“基类指针”

class role
{
public:
    role(){m_arm = NULL;}
    virtual ~role(){};

    void Arm(Arms *arm)
    {
        if (m_arm != NULL) 
            delete m_arm; 
        
        m_arm = arm;
    };
    void ShowArm()
    {
        m_arm->Show();
    };

private:
    //人物信息
    //....

    //人物装备
    Arms *m_arm;
};

.     这样,你在不同的时间就能实现不同的武器切换。

int main(int argc, char* argv[])
{
    role ZhangSan;

    ZhangSan.Arm(new XueYinKuangDao);
    ZhangSan.ShowArm();

    ZhangSan.Arm(new JueShiHaoJian);
    ZhangSan.ShowArm();

    return 0;
}

设计原则:

一:找出类中可能需要变化之处,把他们独立出来封装好,不要和那些不需要变化的代码混在一起。这样可以使代码变化不经意后果变少,系统变的更有弹性。

二:针对接口编程,而不是针对实现编程。 “针对接口编程”真正的意思是“针对超类型编程”

三:多用组合,少用继承。

转载请注明:虚无 » 策略模式

与本文相关的文章

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址