策略模式:定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。——《HEAD FIRST 设计模式》
我的C++代码:
#ifndef DESIGN_STRATEGY_H_ #define DESIGN_STRATEGY_H_ class FlyBehavior { public: virtual void fly() = 0; }; class QuackBehavior { public: virtual void quack() = 0; }; class Duck { public: void Fly(){this->m_pFly->fly();} void Quack(){this->m_pQuack->quack();} protected: FlyBehavior* m_pFly; QuackBehavior* m_pQuack; }; /////////////////////////////////////// class FlyWithWings: public FlyBehavior { public: virtual void fly(); }; class FlyNoWay: public FlyBehavior { public: virtual void fly(); }; class TrueQuack: public QuackBehavior { public: virtual void quack(); }; class Squeak: public QuackBehavior { public: virtual void quack(); }; class MuteQuack: public QuackBehavior { public: virtual void quack(); }; /////////////////////////////////////// class MallardDuck: public Duck { public: MallardDuck(); }; class RedHeadDuck: public Duck { public: RedHeadDuck(); }; class RubberDuck: public Duck { public: RubberDuck(); }; class DecoyDuck: public Duck { public: DecoyDuck(); }; #endif // DESIGN_STRATEGY_H_
#include "strategy.h" #include <iostream> void FlyWithWings::fly() { std::cout << "fly with wings!" << std::endl; } void FlyNoWay::fly() { std::cout << "fly no way!" << std::endl; } void TrueQuack::quack() { std::cout << "Quack!" << std::endl; } void Squeak::quack() { std::cout << "Squeak!" << std::endl; } void MuteQuack::quack() { std::cout << "Mute quack!" << std::endl; } MallardDuck::MallardDuck() { this->m_pFly = new FlyWithWings(); this->m_pQuack = new TrueQuack(); } RedHeadDuck::RedHeadDuck() { this->m_pFly = new FlyNoWay(); this->m_pQuack = new TrueQuack(); } RubberDuck::RubberDuck() { this->m_pFly = new FlyNoWay(); this->m_pQuack = new Squeak(); } DecoyDuck::DecoyDuck() { this->m_pFly = new FlyNoWay(); this->m_pQuack = new MuteQuack(); }
原文:http://www.cnblogs.com/foolbread/p/4433626.html