设计模式与XML(四)策略模式(C++)

一、实验目的及要求

1、掌握行为型模式的概念。

2、掌握备忘录模式、观察者模式、状态模式、策略模式、模板模式、访问者模式的构造方式及使用情景。

二、实验设备(环境)

   1、   软件需求: Dev-Cpp5.4, Rational Rose / Microsoft Visio

2、   硬件需求: Pentium III 450以上的CPU处理器,1G以上的内存,2G的自由硬盘空间

 

三、实验内容

1、某系统提供了一个用于对数组数据进行操作的类,该类封装了对数组的常见操作,如查找数组元素、对数组元素进行排序等。现以排序操作为例,使用策略模式设计该数组操作类,使得客户端可以动态地更换排序算法,可以根据需要选择冒泡排序或选择排序或插入排序,也能够灵活地增加新的排序算法。

 

四、实验步骤与结果

练习一

1.策略模式设计结构图UML图:

设计模式与XML(四)策略模式(C++)_第1张图片

2.实验结果截图:

设计模式与XML(四)策略模式(C++)_第2张图片

 

3.代码分析

Context.h

#ifndef _CONTEXT_H_
#define _CONTEXT_H_
class Strategy;
/**
*这个类是Strategy模式的关键,也是Strategy模式和Template模式的根本区别所在。
*Strategy通过“组合”(委托)方式实现算法(实现)的异构,而Template模式则采取的是继承的方式
*这两个模式的区别也是继承和组合两种实现接口重用的方式的区别
*/
class Context
{
public:
Context(Strategy* stg);
~Context();
void DoAction(int arr[],int n);
protected:
private:
Strategy* _stg;
};
#endif //~_CONTEXT_H_

Context.cpp

#include "Context.h"
#include "Strategy.h"
#include 
using namespace std;
Context::Context(Strategy* stg)
{
_stg = stg;
}
Context::~Context()
{
if (!_stg)
delete _stg;
}
void Context::DoAction(int arr[],int n)
{
_stg->AlgrithmInterface(arr,n);
}

Strategy.h

#ifndef _STRATEGY_H_
#define _STRATEGY_H_
class Strategy
{
public:
Strategy();
virtual ~Strategy();
virtual void AlgrithmInterface(int arr[], int n) = 0;
protected:
private:
};
class bubbleSort:public Strategy
{
public:
bubbleSort();
virtual ~bubbleSort();
void AlgrithmInterface(int arr[], int n);
protected:
private:
};
class choiceSort:public Strategy
{
public:
choiceSort();
virtual ~choiceSort();
void AlgrithmInterface(int arr[], int n);
protected:
private:
};
class insertSort:public Strategy
{
public:
insertSort();
virtual ~insertSort();
void AlgrithmInterface(int arr[], int n);
protected:
private:
};
#endif //~_STRATEGY_H_

Strategy.cpp

#include "Strategy.h"
#include 
using namespace std;
Strategy::Strategy()
{
}
Strategy::~Strategy()
{
cout<<"~Strategy....."< arr[j+1]){  
                int t = arr[j];  
                arr[j] = arr[j+1];  
                arr[j+1] = t;  
            }  
        }  
    }     
 for(int i=0;i

main.cpp

#include "Context.h"
#include "Strategy.h"
#include 
using namespace std;
int main(int argc,char* argv[])
{
	int i;
	int a[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 10};
Strategy* psA;
psA = new bubbleSort();
Context* pcA = new Context(psA);
pcA->DoAction(a,10);
if (NULL != pcA)
delete pcA;

Strategy* psB;
psB = new choiceSort();
Context* pcB = new Context(psB);
pcB->DoAction(a,10);
if (NULL != pcB)
delete pcB;

Strategy* psC;
psC = new insertSort();
Context* pcC = new Context(psC);
pcC->DoAction(a,10);
if (NULL != pcC)
delete pcC;
return 0;

}

 

你可能感兴趣的:(设计模式与XML)