C++编程模式2--策略模式

来源:互联网 发布:初中校园网络文化活动 编辑:程序博客网 时间:2024/06/02 03:51

本博参考了这篇博客 http://www.cnblogs.com/wanggary/archive/2011/04/07/2008796.html
~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~
使用策略的类(CUseStrategy)
抽象策略类(CAbsStrategy)

策略类1(CStrategy1)
策略类2(CStrategy2)
策略类3(CStrategy3)
。。。
这些类之间的关系是:
1、所有的策略类由(使用策略的类UseStrategy)调用。
2、所有的策略类继承自(抽象策略类AbsStrategy)。
3、抽象策略类的对象,作为使用策略类的对象成员。

//UseStrategy.h 文件//使用策略的类#pragma once#include "AbsStrategy.h"//包含抽象策略类的头文件class CUseStrategy{public:    CUseStrategy(IStrategy *pStrategy);    ~CUseStrategy(void);    void Operate(void);private:    CAbsStrategy*m_pStrategy;};
//UseStrategy.cpp#include "StdAfx.h"#include "UseStrategy.h"CUseStrategy::CUseStrategy(CAbsStrategy*pStrategy){    this->m_pStrategy = pStrategy;}CUseStrategy::~CUseStrategy(void){    delete this->m_pStrategy;}void CUseStrategy::Operate(void){    this->m_pStrategy->Operate();}
//AbsStrategy.h #pragma once//抽象策略类文件Class CAbstrategy{Public:    CAbstrategy();    virtual~CAbstrategy();    virtual void operate()=0;//纯虚函数。};
//Strategy1.h文件//策略1#pragma once#include "Abstrategy.h"class CStrategy1    :public CAbstraegy{public:    CStrategy1();    ~CStrategy1();    void operate();};
//Strategy1.cpp文件#include "StdAfx.h"#include "Strategy1.h"#include <iostream>using std::cout;using std::endl;Strategy1::Strategy1(void){}Strategy1::~Strategy1(void){}void Strategy1::operate(void){    cout << "这是策略1!" << endl;}
//Strategy2.h文件//策略1#pragma once#include "Abstrategy.h"class CStrategy2    :public CAbstraegy{public:    CStrategy2();    ~CStrategy2();    void operate();};
//Strategy2.cpp文件#include "StdAfx.h"#include "Strategy2.h"#include <iostream>using std::cout;using std::endl;Strategy2::Strategy2(void){}Strategy2::~Strategy2(void){}void Strategy2::operate(void){    cout << "这是策略2!" << endl;}
//Strategy3.h文件//策略3#pragma once#include "Abstrategy.h"class CStrategy3    :public CAbstraegy{public:    CStrategy3();    ~CStrategy3();    void operate();};
//Strategy3.cpp文件#include "StdAfx.h"#include "Strategy3.h"#include <iostream>using std::cout;using std::endl;Strategy3::Strategy3(void){}Strategy3::~Strategy3(void){}void Strategy3::operate(void){    cout << "这是策略3!" << endl;}

==========================================================
见证奇迹的时刻
=========================================================

#include"UseStrategy.h"#include "Abstrategy.h"#include "Strategy1.h"#include "Strategy2.h"#include "Strategy3.h"int main(){    CUseStrategy*pUseStrategy;    //使用第一个策略    pUseStrategy=new(new CStrategy1());    pUseStrategy->operate();    delete pUseStrategy;    //使用第二个策略    pUseStrategy=new(new CStrategy2());    pUseStrategy->operate();    delete pUseStrategy;    //使用第三个策略    pUseStrategy=new(new CStrategy3());    pUseStrategy->operate();    delete pUseStrategy;}
0 0
原创粉丝点击