• 设计模式之策略模式


    Strategy Pattern:策略模式是一种将操作相同(外表相同)但是实现不同(内在不同)的算法集合起来定义并封装起来,让他们之间可以相互的替换,这种模式可以让算法的变化独立于适用算法的客户。

           举例:在CS或者其他游戏可以切换武器的游戏中,游戏角色可以通过某些热键或者其他的触发点来使用不同的武器,适用策略模式就可以解决这个问题,以下是具体的实现方法:

    (我的UML图插不进来,省略)

            如上图所示,将适用武器这个行为(算法)从Character类中直接提取出来作为一个武器算法库,接口类为WeaponBehaviorCharacterWeaponBehavior的关系为“有一个”而不是“是一个”,在OO编程中,有一个“比”是一个“有更大的弹性和可维护性。

         WeaponBehavior接口提供了一个UseWeapon的武器适用接口方法,在它的具体实现算法中重载这个接口即可,比如右边的4个实现类,这样当执行者调用该接口的时候,便可以根据具体的需要调用不同的“算法“。

           Character中为所有的游戏角色提供了FightSetWeapon两个方法,SetWeapon便是提供动态切换“算法“的接口,而Fight则是切换后对算法的执行。左图的四类便是具体的游戏角色。

    上面的代码分别实现了UML图中的部分重要类和接口,为了测试是否支持动态切换武器,再列出一个简单的测试代码,只为测试。

    输出的结果为:

    Use Sword Attack!

    Use Axe Attack!

    Use Knife Attack!

    在测试代码中,我们虽然没有完整的封装算法,但是已经演示了动态切换武器的过程,实现了策略模式所要注意和学会的东西。

     

  • 相关阅读:
    观察OnPaint与OnIdle与OnSize事件
    wxPython的Refresh与事件双重响应
    DLL的静态调用和动态调用
    Delphi String的散漫记录,真是知识无数,陷阱无数
    VC调用Delphi DLL
    终于理解了什么是LGPL
    安装postgresql碰到Unable to write inside TEMP environment path
    图解:Activity生命周期
    Dephi泛型
    传递双重指针申请内存,典型用法
  • 原文地址:https://www.cnblogs.com/KevinYuen/p/2940370.html
Copyright © 2020-2023  润新知