Strategy Pattern:策略模式是一种将操作相同(外表相同)但是实现不同(内在不同)的算法集合起来定义并封装起来,让他们之间可以相互的替换,这种模式可以让算法的变化独立于适用算法的客户。
举例:在CS或者其他游戏可以切换武器的游戏中,游戏角色可以通过某些热键或者其他的触发点来使用不同的武器,适用策略模式就可以解决这个问题,以下是具体的实现方法:
(我的UML图插不进来,省略)
如上图所示,将适用武器这个行为(算法)从Character类中直接提取出来作为一个武器算法库,接口类为WeaponBehavior,Character和WeaponBehavior的关系为“有一个”而不是“是一个”,在OO编程中,”有一个“比”是一个“有更大的弹性和可维护性。
WeaponBehavior接口提供了一个UseWeapon的武器适用接口方法,在它的具体实现算法中重载这个接口即可,比如右边的4个实现类,这样当执行者调用该接口的时候,便可以根据具体的需要调用不同的“算法“。
在Character中为所有的游戏角色提供了Fight和SetWeapon两个方法,SetWeapon便是提供动态切换“算法“的接口,而Fight则是切换后对算法的执行。左图的四类便是具体的游戏角色。
上面的代码分别实现了UML图中的部分重要类和接口,为了测试是否支持动态切换武器,再列出一个简单的测试代码,只为测试。
输出的结果为:
Use Sword Attack!
Use Axe Attack!
Use Knife Attack!
在测试代码中,我们虽然没有完整的封装算法,但是已经演示了动态切换武器的过程,实现了策略模式所要注意和学会的东西。