每日设计模式——策略模式

      策略模式,定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户。其适用性体现在,很多相关类仅仅是行为有异,可以使用策略模式用这n个行为中的一个配置这个类;使用一个算法的不同变体,这个算法的结果是相同的,区别在于时间或空间复杂度不同;算法使用客户不应该知道的数据;一个类定义了多种行为,此时去掉条件分支,将这些分支移入具体的策略中去代替这些条件语句。

      《大话设计模式》里面举得例子是商场打折的例子,而且将策略模式和简单工厂结合在了一起,将客户端对于策略的判断移到了配置上下文里,用来维护算法的选择。不过这样做还是不满足“开放-封闭”原则,因为简单工厂本身就不满足这个原则。他的例子主要是说商场让利促销活动会有很多方法,比如打折,满多少钱返多少钱等等,这些都是不同的策略,如何在这些策略的基础之上再新增策略也不会对现有系统造成太大的改变,这就是策略模式要解决的问题。

      古剑的战斗系统里,不同的角色可以用同样的招式,但是每个角色使出来的效果是不一样的。招式应该是一个招式接口,下面具体实现没每个招式,然后因为效果其实有很多,所以应该单独抽取出来成为一个效果接口,然后形成不同的效果。而生成这些效果应当是有一些算法来支持的,我们没必要在算法里去判断这招是谁出的,然后是攻击或者加强谁的,根据五行应该怎样怎样,可以在调用算法之前使用策略模式,直接判断应该调用哪个算法去计算这个结果即可。这种算法肯定不止一个,而且应该有很多条件判断,这就是满足策略模式的基础。

      以下是代码实现(本来有三个策略,只写两个哈,因为没什么差别)。

 

strategy.h 文件

 

concreteStrategyA.h 文件

 

concreteStrategyA.cpp 文件

 

concreteStrategyB.h 文件

 

concreteStrategyB.cpp 文件

 

 

context.h 文件

 

context.cpp 文件

 

main.cpp 文件

 

运行结果

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值