標籤:構造 color 就是 初始 owa art ptr protect win
策略模式定義了演算法族,分別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變化獨立於使用演算法的客體。
書上的例子是鴨子,參考blog的例子是緩衝演算法。參考blog見:6665197
鴨子:
class FlyBehavior {public: virtual void fly() {};};class FlyWithWings : public FlyBehavior {public: void fly() { std::cout<<"Fly With Wings"<<std::endl; }};class FlyNoWay : public FlyBehavior {public: void fly() { std::cout<<"Cannot Fly"<<std::endl; }};class QuackBehavior {public: virtual void quack() {};};class Quack : public QuackBehavior {public: void quack() { std::cout<<"Quack"<<std::endl; }};class Squeak : public QuackBehavior {public: void quack() { std::cout<<"Squeak"<<std::endl; }};class MuteQuack : public QuackBehavior {public: void quack() { std::cout<<"Mute"<<std::endl; }};class Duck {public: Duck() : flyBehavior(nullptr), quackBehavior(nullptr) {}; void fly() { flyBehavior->fly(); } void quack() { quackBehavior->quack(); }protected: FlyBehavior* flyBehavior; QuackBehavior* quackBehavior;};class MallardDuck : public Duck{public: MallardDuck () { flyBehavior = new FlyWithWings; quackBehavior = new Quack; } ~MallardDuck() { delete flyBehavior; delete quackBehavior; }};
跟java相比的不同主要在於:
1. 對於封裝的演算法的父類型,在作為類成員的時候,要定義為指標。
2. 其實這條跟java關係不大。就是類成員變數有指標的時候,需要自己實現解構函式。
跟參考blog的演算法的實現區別在於:
1. 參考blog的演算法,建構函式需要傳入一個表明類型和演算法實現的參數。鴨子這個例子中,不同的鴨子整合鴨子父類,然後在子類的建構函式中初始化父類成員指標。
設計模式c++(2)——策略模式