Qt C++设计模式——策略模式

三国后期,蜀国属于弱势一方,现丞相需要派出一位大将前去攻城,再有一位大将守城!丞相有妙计2条,阵型2个。那么派何人守城?何人去攻城?他们各使用何计?各使用何阵型?

在这个需求中,丞相的策略和所制定的阵型是可以随时变化的,而且不仅仅只有2条计策、2个阵型,所以我们需要单独的将计策和阵型独立出来,形成单独的算法族。以后出征前丞相有新的锦囊妙计也不会影响出征时的武将选择。这样无论派出何人去攻城都可以,派何人守城也是可以的。只需要按照不同的需求去领取不同的妙计和阵型即可。

策略模式——定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

代码实现

class JiMou{

public:
    JiMou(){}
    ~JiMou(){}

    virtual void ShiXing() = 0;
};

class FanJianJi:public JiMou{

public:
    FanJianJi(){}
    ~FanJianJi(){}

    void ShiXing(){
        qDebug() << QStringLiteral("用反间计!");
    }
};

class KongChengJi:public JiMou{

public:
    KongChengJi(){}
    ~KongChengJi(){}

    void ShiXing(){
        qDebug() << QStringLiteral("用空城计!");
    }

};

class BuZhen{
public:
    BuZhen(){}
    ~BuZhen(){}

    virtual void ZhiXing() = 0;
};

class ChangSheZhen:public BuZhen{

public:
    ChangSheZhen(){}
    ~ChangSheZhen(){}

    void ZhiXing(){
        qDebug() << QStringLiteral("布长蛇阵!");
    }
};

class BaGuaZhen:public BuZhen{

public:
    BaGuaZhen(){}
    ~BaGuaZhen(){}

    void ZhiXing(){
        qDebug() << QStringLiteral("布八卦阵!");
    }
};

class WuJiang{
public:
    WuJiang(){}
    ~WuJiang(){}

    virtual void LingMing() = 0;
};

class ZiLong:public WuJiang{
public:
    ZiLong(){}
    ~ZiLong(){}

    JiMou *jimou = new FanJianJi;
    BuZhen *buzhen = new ChangSheZhen;

    void LingMing(){
        qDebug() << QStringLiteral("赵子龙领命!");
        jimou->ShiXing();
        buzhen->ZhiXing();
    }
};

class GuanYu:public WuJiang{

public:
    GuanYu(){}
    ~GuanYu(){}

    JiMou *jimou = new KongChengJi;
    BuZhen *buzhen = new BaGuaZhen;

    void LingMing(){
        qDebug() << QStringLiteral("关羽领命!");
        jimou->ShiXing();
        buzhen->ZhiXing();
    }
};

调用时:

WuJiang *w1 = new ZiLong;
WuJiang *w2 = new GuanYu;

w1->LingMing();
w2->LingMing();

执行结果:

发布了28 篇原创文章 · 获赞 4 · 访问量 7391

猜你喜欢

转载自blog.csdn.net/JuicyActiveGilbert/article/details/99945515