设计模式-策略模式

策略模式

      定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

举例分析

需求:有多个角色(Troll、Knight、King、Queen),都可以进行战斗,但战斗技能不同(以十八般武艺为例)。巨魔(Troll)使用axe,骑士(Knight)使用sword,国王(King)也使用sword,女王(Queen)使用BowAndArrow

方案1

      比较容易想到的是继承,即父类Actor有一个fight方法,各具体角色继承Actor,Override fight方法实现自己的内容。但使用同样战斗技能的角色,比如King和Knight的fight方法一样,就造成了重复代码,随着角色的增加,重复度会很多。

                                      

方案2

根据设计模式的原则:

  • 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起
  • 多用组合,少用继承

进行如下改进(也就是策略模式):

  • 抽象出战斗技能十八般武艺的接口,各具体战斗技能实现该接口的战斗方法
  • 角色父类has one战斗技能,各具体角色的fight实现就转成了使用战斗技能,实现了代码复用,同时还可以通过setWeaponBehavior设置新的战斗技能,变更其fight实现,功能更加灵活

你可能感兴趣的:(设计模式)