美文网首页
c++策略模式

c++策略模式

作者: 一路向后 | 来源:发表于2021-02-16 22:11 被阅读0次

1.策略模式简介

   在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。

2.源码实现

#include <iostream>

using namespace std;

//飞行行为
class FlyBehavior {
public:
    virtual ~FlyBehavior(){};
    virtual void fly() = 0;
};

//叫声行为
class QuackBehavior {
public:
    virtual ~QuackBehavior(){};
    virtual void quack() = 0;
};

//鸭子基类
class Duck {
public:
    Duck(FlyBehavior *p_FlyBehavior, QuackBehavior *p_QuackBehavior)
    {
        pFlyBehavior = p_FlyBehavior;
        pQuackBehavior = p_QuackBehavior;
    }

    virtual ~Duck(){};

    virtual void display(){};

    void performFly()
    {
        pFlyBehavior->fly();
    }

    void performQuack()
    {
        pQuackBehavior->quack();
    }

    void swim()
    {
        cout << "All ducks float, even decoys!" << endl;
    }

private:
    FlyBehavior *pFlyBehavior;
    QuackBehavior *pQuackBehavior;
};

//实现飞行行为的方法
class FlyWithWings : public FlyBehavior
{
public:
    void fly()
    {
        cout << "I am can't fly" << endl;
    }
};

//实现叫声行为的类
class Quack : public QuackBehavior {
public:
    void quack()
    {
        cout << "Quack" << endl;
    }
};

class MallardDuck : public Duck
{
public:
    MallardDuck(FlyBehavior *fly_behavior = new FlyWithWings(), QuackBehavior *quack_behavior = new Quack()) : Duck(fly_behavior, quack_behavior)
    {
    }

    ~MallardDuck()
    {
    }

    void display()
    {
        cout << "I'm real Mallard duck" << endl;
    }
};

int main(int argc, char **argv)
{
    Duck *mallard = new MallardDuck();

    mallard->performFly();
    mallard->performQuack();

    delete mallard;

    return 0;
}

3.编译源码

$ g++ -o example example.cpp

4.运行及其结果

$ ./example
I am can't fly
Quack

相关文章

网友评论

      本文标题:c++策略模式

      本文链接:https://www.haomeiwen.com/subject/rjybxltx.html