zoukankan      html  css  js  c++  java
  • 设计模式之策略模式

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

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

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

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

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

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

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

    输出的结果为:

    Use Sword Attack!

    Use Axe Attack!

    Use Knife Attack!

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

     

  • 相关阅读:
    vue脚手架配置插件image-webpack-loader 图片压缩
    umi-request 一个新的请求工具
    uniapp 中出现 wx.config is not a function
    项目跨域开启代理,前端不再需要找后端了!!!
    vue脚手架项目 以及react项目,webpack配置去除多余css样式
    uniapp 实现动态切换全局主题色
    uniapp 开发app 开启页面的下拉刷新无效
    C# ? 语法糖
    正则表达式
    nginx 自签名
  • 原文地址:https://www.cnblogs.com/KevinYuen/p/2940370.html
Copyright © 2011-2022 走看看