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

// 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;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值