C语言实现设计模式之行为模式:策略模式

行为模式主要用于解决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){
...
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值