首页 > 代码库 > 设计模式-策略模式
设计模式-策略模式
代码实现
1 class Strategy 2 { 3 public: 4 Strategy() {} 5 6 virtual void AlgrithmInterface() = 0; //算法族接口 7 8 virtual ~Strategy() 9 {10 cout << "Strategy Destruction called." << endl;11 }12 };13 14 class ConcrateStrategyA : public Strategy15 {16 public:17 ConcrateStrategyA() {}18 19 virtual void AlgrithmInterface()20 {21 cout << "ConcrateStrategyA AlgrithmInterface Called." << endl;22 }23 24 virtual ~ConcrateStrategyA()25 {26 cout << "ConcrateStrategyA Destruction called" << endl;27 }28 };29 30 class ConcrateStrategyB : public Strategy31 {32 public:33 ConcrateStrategyB() {}34 35 virtual void AlgrithmInterface()36 {37 cout << "ConcrateStrategyB AlgrithmInterface Called." << endl;38 }39 40 virtual ~ConcrateStrategyB()41 {42 cout << "ConcrateStrategyB Destruction Called" << endl;43 }44 };45 46 47 class Context48 {49 public:50 Context(Strategy *pStrategy)51 {52 mStrategy = pStrategy;53 }54 55 void DoAction()56 {57 if (mStrategy)58 {59 mStrategy->AlgrithmInterface();60 }61 }62 63 void SetStrategy(Strategy *pStrategy)64 {65 mStrategy = pStrategy;66 }67 ~Context()68 {69 if (mStrategy)70 {71 delete mStrategy;72 mStrategy = NULL;73 }74 }75 private:76 Strategy *mStrategy;77 };78 79 int _tmain(int argc, _TCHAR* argv[])80 {81 ConcrateStrategyA *strategyA = new ConcrateStrategyA;82 ConcrateStrategyB *strategyB = new ConcrateStrategyB;83 Context context(strategyA);84 context.DoAction();85 86 context.SetStrategy(strategyB);87 context.DoAction();88 89 delete strategyA;90 strategyA = NULL;91 delete strategyB;92 strategyB = NULL;93 getchar();94 return 0;95 }
Head First 设计模式中鸭子实例
设计模式-策略模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。