c语言,去你的策略模式!

模式动机

完成一项任务,往往可以有多种不同的方式,每一种方式称为一个策略,我们可以根据环境或者条件的不同选择不同的策略来完成该项任务。

在软件开发中也常常遇到类似的情况,实现某一个功能有多个途径,此时可以使用一种设计模式来使得系统可以灵活地选择解决途径,也能够方便地增加新的解决途径。

简单来说,策略模式就是用统一的方法接口分别对不同类型的数据进行访问。

场景案例

场景:现在我们想用pc看一部电影,但是影片本身有多种播放格式。比如rmvb要rmvb格式的方法,avi要avi的方法,mpeg要mpeg的方法。

传统代码实现

...
void main()
{
...
if (movie == avi)
{
    ...//avi影片的播放策略
}
else if (movie == rmvb)
{
    ...//rmvb影片的播放策略
}
else if
...
}

在上面的代码实现中,把所有的功能代码全部集中在一个函数里面完成了,随着分支的扩展,整个函数会越来越臃肿,非常难以维护。我们应该把每个分枝的实现抽离出来,封装在函数里面实现。

改进代码实现1:

...
void main()
{
if (movie == avi)
{
   play_avi_movie();//avi影片的播放策略
}
else if (movie == rmvb)
{
   play_rmvb_movie();//rmvb影片的播放策略
}
else if
...
}

在上面的代码实现中,我们通过把分支代码封装起来,减少了主函数的复杂性。但是从更高的一层的抽象看,主函数其实不关心各种分支情况。它希望的是,在进行必要的配置工作以后,直接调用某一个函数接口就能完成功能。

因此,我们应该把各个分支函数抽离出来,统一用某个函数接口来表示。只要在程序中进行完配置工作以后,那么主函数接下来就能直接调用该函数接口。

改进代码实现2:

void (*play_movie)();

void set_movie(char movie)
{
  if(movie == avi)
  {
    play_movie = play_avi_movie;
  }
  else if(movie == rmvb)
  {
    play_movie = play_rmvb_movie;
  }
  else if
  ...
}

void main()
{
...
set_movie();
...
play_movie();
...
}

这就是c语言中的策略模式,重点在于分离各个分支的实现函数,主程序只需要通过唯一的接口,就能完成相应功能,提高了程序的可维护性和扩展性。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值