add Strategy Pattern
parent
ba025cb044
commit
d12d406ed1
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
Binary file not shown.
After Width: | Height: | Size: 19 KiB |
|
@ -0,0 +1,44 @@
|
||||||
|
#ifndef __CONTEXT_H__
|
||||||
|
#define __CONTEXT_H__
|
||||||
|
|
||||||
|
#include "Strategy.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
// ÉÏÏÂÎÄÀà
|
||||||
|
class Context
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Context(){
|
||||||
|
arr = NULL;
|
||||||
|
N = 0;
|
||||||
|
}
|
||||||
|
Context(int iArr[], int iN){
|
||||||
|
this->arr = iArr;
|
||||||
|
this->N = iN;
|
||||||
|
}
|
||||||
|
void setSortStrategy(Strategy* iSortStrategy){
|
||||||
|
this->sortStrategy = iSortStrategy;
|
||||||
|
}
|
||||||
|
void sort(){
|
||||||
|
this->sortStrategy->sort(arr, N);
|
||||||
|
printf("Êä³ö£º ");
|
||||||
|
this->print();
|
||||||
|
}
|
||||||
|
void setInput(int iArr[], int iN){
|
||||||
|
this->arr = iArr;
|
||||||
|
this->N = iN;
|
||||||
|
}
|
||||||
|
void print(){
|
||||||
|
for (int i = 0; i < N; i++){
|
||||||
|
printf("%3d ", arr[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
Strategy* sortStrategy;
|
||||||
|
int* arr;
|
||||||
|
int N;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // __CONTEXT_H__
|
|
@ -0,0 +1,87 @@
|
||||||
|
#ifndef __STRATEGY_H__
|
||||||
|
#define __STRATEGY_H__
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
// 抽象策略类
|
||||||
|
class Strategy
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Strategy(){}
|
||||||
|
virtual void sort(int arr[], int N) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 具体策略:冒泡排序
|
||||||
|
class BubbleSort :public Strategy
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BubbleSort(){
|
||||||
|
printf("冒泡排序\n");
|
||||||
|
}
|
||||||
|
void sort(int arr[], int N){
|
||||||
|
for (int i = 0; i<N; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j<N - i - 1; j++)
|
||||||
|
{
|
||||||
|
if (arr[j]>arr[j + 1]){
|
||||||
|
int tmp = arr[j];
|
||||||
|
arr[j] = arr[j + 1];
|
||||||
|
arr[j + 1] = tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 具体策略:选择排序
|
||||||
|
class SelectionSort :public Strategy
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SelectionSort(){
|
||||||
|
printf("选择排序\n");
|
||||||
|
}
|
||||||
|
void sort(int arr[], int N){
|
||||||
|
int i, j, k;
|
||||||
|
for (i = 0; i<N; i++)
|
||||||
|
{
|
||||||
|
k = i;
|
||||||
|
for (j = i + 1; j<N; j++)
|
||||||
|
{
|
||||||
|
if (arr[j] < arr[k]){
|
||||||
|
k = j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int temp = arr[i];
|
||||||
|
arr[i] = arr[k];
|
||||||
|
arr[k] = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 具体策略:插入排序
|
||||||
|
class InsertSort :public Strategy
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
InsertSort(){
|
||||||
|
printf("插入排序\n");
|
||||||
|
}
|
||||||
|
void sort(int arr[], int N){
|
||||||
|
int i, j;
|
||||||
|
for (i = 1; i<N; i++)
|
||||||
|
{
|
||||||
|
for (j = i - 1; j >= 0; j--)
|
||||||
|
{
|
||||||
|
if (arr[i]>arr[j]){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int temp = arr[i];
|
||||||
|
for (int k = i - 1; k > j; k--){
|
||||||
|
arr[k + 1] = arr[k];
|
||||||
|
}
|
||||||
|
arr[j + 1] = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,28 @@
|
||||||
|
#include "Context.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
Context* ctx = new Context();
|
||||||
|
int arr[] = { 10, 23, -1, 0, 300, 87, 28, 77, -32, 2 };
|
||||||
|
ctx->setInput(arr, sizeof(arr)/sizeof(int));
|
||||||
|
printf("输入:");
|
||||||
|
ctx->print();
|
||||||
|
|
||||||
|
// 冒泡排序
|
||||||
|
ctx->setSortStrategy(new BubbleSort());
|
||||||
|
ctx->sort();
|
||||||
|
|
||||||
|
// 选择排序
|
||||||
|
ctx->setSortStrategy(new SelectionSort());
|
||||||
|
ctx->sort();
|
||||||
|
|
||||||
|
// 插入排序
|
||||||
|
ctx->setSortStrategy(new InsertSort());
|
||||||
|
ctx->sort();
|
||||||
|
|
||||||
|
printf("\n\n");
|
||||||
|
system("pause");
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -98,3 +98,7 @@ Jungle设计模式系列
|
||||||
24.设计模式(二十四)——状态模式
|
24.设计模式(二十四)——状态模式
|
||||||
|
|
||||||
博客地址:https://blog.csdn.net/sinat_21107433/article/details/102966121
|
博客地址:https://blog.csdn.net/sinat_21107433/article/details/102966121
|
||||||
|
|
||||||
|
25.设计模式(二十五)——策略模式
|
||||||
|
|
||||||
|
博客地址:https://blog.csdn.net/sinat_21107433/article/details/102984862
|
Loading…
Reference in New Issue