策略模式(Strategy Pattern)
- 描述:定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的用户
- UML 类图:
- 代码举例:
class FlyBehavior
{
virtual void fly();
}
class FBA : public FlyBehavior
{
virtual void fly()
{ std::cout<<"FBA"<<std::endl; }
}
class FBB : public FlyBehavior
{
virtual void fly()
{ std::cout<<"FBB"<<std::endl; }
}
class QuackBehavior
{
virtual void quack();
}
class QBA : public QuackBehavior
{
virtual void quack()
{ std::cout<<"QBA"<<std::endl; }
}
class QBB : public QuackBehavior
{
virtual void quack()
{ std::cout<<"QBB"<<std::endl; }
}
class Duck
{
public:
void swim();
void display();
void performQuack()
{ m_pQuackBehavior->quack(); }
void performFly()
{ m_pFlyBehavior->fly(); }
void setFlyBehavior(FlyBehavior*& fb)
{ m_pFlyBehavior = fb; }
void setQuackBehavior(QuackBehavior*& qb)
{ m_pQuackBehavior = qb; }
virtual void display()
{ std::cout<<"Duck"<<std::endl; }
FlyBehavior* m_pFlyBehavior;
QuackBehavior* m_pQuackBehavior;
}
class DuckA : public Duck
{
public:
DuckA()
{
m_pFlyBehavior = new FBA;
m_pQuackBehavior = new QBA;
}
virtual void display()
{ std::cout<<"DuckA"<<std::endl; }
}
class DuckB : pulic Duck
{
public:
DuckB()
{
m_pFlyBehavior = new FBB;
m_pQuackBehavior = new QBB;
}
virtual viod display()
{ std::cout<<"DuckB"<<std::endl; }
}
int main()
{
DuckA* duckA= new DuckA();
duckA->performFly();
duckA->performQuack();
DuckB* duckB = new DuckB();
duckB->performFly();
duckB->performQuack();
duckA->setFlyBehavior(new FBB);
duckA->performFly();
}