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
网友评论