策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
我们在使用一些功能时,有时有很多种实现方法,或者多种结果,但是都有同样的使用方法,即调用接口,这就是策略模式。
// 设计模式Demo.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <string> using namespace std; //交通策略基类,定义一个策略接口 class TrafficStrategyBase { public: virtual void goHome() = 0; }; //步行策略 class WalkStragety : public TrafficStrategyBase { public: void goHome() override { cout<<"go home on foot"<<endl; } }; //开车策略 class DriveStrategy : public TrafficStrategyBase { public: void goHome() override { cout<<"go home by car"<<endl; } }; //客户端 int _tmain(int argc, _TCHAR* argv[]) { //使用开车策略 TrafficStrategyBase* strategy = new DriveStrategy(); strategy->goHome(); //使用步行策略 strategy = new WalkStragety(); strategy->goHome(); system("pause"); return 0; }
// 设计模式Demo.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <string> using namespace std; //交通策略基类,定义一个策略接口 class TrafficStrategyBase { public: virtual void goHome() = 0; }; //步行策略 class WalkStragety : public TrafficStrategyBase { public: void goHome() override { cout<<"go home on foot"<<endl; } }; //开车策略 class DriveStrategy : public TrafficStrategyBase { public: void goHome() override { cout<<"go home by car"<<endl; } }; enum TrafficStrategy { Walk,Drive }; //简单工厂类(策略工厂) class StrategyFactory { public: TrafficStrategyBase* CreateStrategy(TrafficStrategy s) { switch (s) { case Walk: return new WalkStragety(); case Drive: return new DriveStrategy(); default: return nullptr; } } }; //客户端 int _tmain(int argc, _TCHAR* argv[]) { //使用开车策略回家 StrategyFactory* factory = new StrategyFactory(); factory->CreateStrategy(Drive)->goHome(); //使用步行策略回家 factory->CreateStrategy(Walk)->goHome(); system("pause"); return 0; }
原文地址:http://blog.csdn.net/puppet_master/article/details/46472911