c++设计模式--策略模式

来源:互联网 发布:源码加密php 编辑:程序博客网 时间:2024/06/05 06:00

// StrategyPattern.cpp : 定义控制台应用程序的入口点。
//通过此例程了解设计模式里的:“策略模式”

//策略模式:策略模式定义了一系列的算法,并将每一个算法封装起来,
//而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

//下面采用《大话设计模式》里的赵云拆锦囊的例子解释这一模式
//《三国演义》里赵云陪刘备去关东娶亲,临行时诸葛亮给了赵云三个锦囊
//为防不测,命令赵云在危机时刻一一打开这三个锦囊

//锦囊1:刚到吴国拆开  策略:找乔国老帮忙,让吴国太给孙权施加压力
//锦囊2:刘备乐不思蜀时拆开 策略:求吴国太开个绿灯,放行
//锦囊3:关东派兵追赶时拆开 策略:孙夫人断后,挡住追兵

//在这个情节里,赵云负责拆开锦囊,策略都放在锦囊里



#include "stdafx.h"#include <process.h>#include <iostream>using  namespace std;//策略基类,提供接口class CStrategy{public:     CStrategy()  {  }  virtual ~CStrategy()  {  }public: virtual void Opreate()=0;};//策略一:找乔国老帮忙,让吴国太给孙权施加压力class CBackDoor:public CStrategy{public: CBackDoor() { } ~CBackDoor() { }public: void Opreate() {  cout<<"找乔国老帮忙,让吴国太给孙权施加压力"<<endl; }};//策略二:求吴国太开个绿灯,放行class COpenGreenLight:public CStrategy{public: COpenGreenLight() { } ~COpenGreenLight() { }public: void Opreate() {  cout<<"求吴国太开个绿灯,放行"<<endl; }};//策略三:孙夫人断后,挡住追兵class CBlockEnemy:public CStrategy{public: CBlockEnemy() { } ~CBlockEnemy() { }public: void Opreate() {  cout<<"孙夫人断后,挡住追兵"<<endl; }};//锦囊类class CContext{public: CContext(CStrategy *pStrategy) {  this->m_pStrategy=pStrategy; } ~CContext() {  delete this->m_pStrategy; } void Opreate() {  this->m_pStrategy->Opreate(); }private: CStrategy *m_pStrategy;}; int _tmain(int argc, _TCHAR* argv[]){ cout<<"---------策略模式测试案例-----------"<<endl<<endl; cout<<"------------赵云到了关东,拆开第一个锦囊..----------------"<<endl; CContext *pContext=new CContext(new CBackDoor()); pContext->Opreate(); delete pContext; pContext=NULL; cout<<endl; cout<<"------------赵云发现主公不想回家了,决定拆开第二个锦囊..----------------"<<endl; pContext=new CContext(new COpenGreenLight()); pContext->Opreate(); delete pContext; pContext=NULL; cout<<endl; cout<<"--------------赵云发现孙权那孙子在后面追赶,立刻拆开第三个锦囊..--------------"<<endl; pContext=new CContext(new CBlockEnemy()); pContext->Opreate(); delete pContext; pContext=NULL; system("pause"); return 0;}


 

原创粉丝点击