行为模式主要用于解决if--else过多的问题
策略模式用于输出仅与本次输入输入有关,与以前的输入无关。
策略模式就是建立统一的接口(建立数据机制),将具体处理方法(策略)分离出来(机制与策略的分离)
举例:针对不同人的打折销售。会员与非会员不一样,普通会员和VIP又不一样。以后可能还有VVIP,SVIP等。
*这可能是非常核心的机制!
策略模式最主要的特征就是定义好一组接口!
一般结构
#ifndef REQUEST_H
#define REQUEST_H
typedef struct{
...
}Request;
typedef enum{HANDLE1=0,...,HANDLEN}HandlerType;
void handleRequest(Request *r, HandlerType h);
#endif
#include"request.h"
void handleRequest(Request *r,HandleType h){
...
switch(h){
case "HANDLE1":...break;//处理方法1
...
case "HANDLEN":...break;//处理方法N
}
}
策略模式
/*****************Strategy。h**************************/
#ifndef REQUEST_H
#define REQUEST_H
typedef struct{
...
}Request;
typedef void(*Strategy)(Request *);//很重要!接口,这就是策略
/**************myStrategy.h**********************/
#ifndef MY_STRATEGY_H
#define MY_STRATEGY_H
void Strategy1(Request *r);
...
void StrategyN(Request *r);
#endif
/**************myStrategy.c*******************/
void Strategy1(Request *r){
....
}
...
void StrategyN(Request *r){
...
}
void client(){
...
Strategy handler=strategyN;
...
handler(r);
...
}
举一个例子:排序。
具体的排序算法由多种,将算法与具体的数据分开
1.定义接口
//策略
void (*strategy)(int *data, int len);//体现策略,共同的接口
//调用接口
void sort(int *data, int len,stragtegy *s);
2.实现
void sort(int *data, int len,stragtegy *s){
s(data,len);
}
void strategy_1(int *data, int len){
...
}
void strategy_2(int *data, int len){
...
}
void strategy_N(int *data, int len){
...
}