您的位置:首页 > 其它

设计模式——策略模式(Strategy)

2013-11-04 20:44 393 查看
定义好各个阶段的工作,然后按流程去走。

举一个例子:

文件操作有:打开,处理,关闭。

文件操作流程:打开——>处理——>关闭

CFileContext:操作的控制控制类

#include "IStrategy.h"

class CFileContext
{
public:
CFileContext(IStrategy* strategy);
~CFileContext(void);

void Operate();

private:
IStrategy *mp_strategy;
};
CFileContext::CFileContext(IStrategy *strategy)
{
mp_strategy = strategy;
}

CFileContext::~CFileContext(void)
{
delete mp_strategy;
}

void CFileContext::Operate()
{
mp_strategy->Operate();
}


IStrategy:各个操作的接口

#pragma once

class IStrategy
{
public:
IStrategy(void);
virtual ~IStrategy(void);

virtual void Operate() = 0;
};
#include "IStrategy.h"

IStrategy::IStrategy(void)
{
}

IStrategy::~IStrategy(void)
{
}


CDealFileOpen,CDealFileWork,CDealFileClose

是对IStrategy的实现,分别实现打开,处理,关闭操作。

#pragma once
#include "IStrategy.h"

class CDealFileOpen : public IStrategy
{
public:
CDealFileOpen(void);
~CDealFileOpen(void);

void Operate();
};


<pre name="code" class="cpp">#pragma once
#include "IStrategy.h"

class CDealFileWork: public IStrategy
{
public:
CDealFileWork(void);
~CDealFileWork(void);

void Operate();
};

#pragma once
#include "IStrategy.h"
class CDealFileClose: public IStrategy
{
public:
CDealFileClose(void);
~CDealFileClose(void);

void Operate();
};



#include "DealFileOpen.h"
#include <iostream>
using std::cout;
using std::endl;
CDealFileOpen::CDealFileOpen(void)
{}

CDealFileOpen::~CDealFileOpen(void)
{}

void CDealFileOpen::Operate()
{
cout<<" Open File.\n "<<endl;
}


程序运行结果:

 Open File.

Start to Work.

Close File.


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: