策略这两个字乍一听上去有点像三国志游戏里,那些鬼点子特别多的谋士出的阴谋阳谋之类的。但在面向对象的软件世界中,策略的范围要比谋略广很多。
我想以一款网络游戏来描述这个模式,玩过魔兽世界的人都知道它是比较早引入地下城(Dungeon)概念的游戏之一。地下城里有各种妖魔鬼怪给玩家砍啊杀啊。杀死boss后会掉落玩家所需要的各种装备。地下城从低级到高级,种类繁多,适合不同等级的玩家去探险刷装备。其中一些特殊的地下城因为难度较高,对玩家的人数有要求,需要组队才能通过冒险。越高难度需要的人数越多,当然奖励也会越丰厚。
比如著名的黑龙公主巢穴,这个地下城可以支持10人组队和25人组队两种游戏难度。组队在游戏中指的是由一名队长(玩家)联合其他玩家组成一个小队,一起完成冒险。队长必须先选定难度(比如10人或者25人),再开始召集各路好手,进入地下城探险。
闲聊结束。
接下来,让我们从游戏设计者的角度来看待这个问题。刚开始的设计应该是这样的。一切看上去很简单。
后来游戏开发者突发奇想,觉得25人也没有挑战性了,又想增加难度,加入一个40人组队的难度。
其实在加入40人难度时,合格的设计者就会开始思考,将来是否还会加入60人甚至80人难度?
根据不同难度,分别初始化地下城。其实初始化这个动作本身就可以看做一种策略。策略模式也可以在此发挥它的长处。
我们现在需要定义三种策略,策略其实就是一种动作,如果用计算机语言描述约等于算法(后面统一用算法来代替动作这个名词)。
如下图所示
到这里其实还没有真正发挥策略模式的优点。
如果用抽象的概念来看,这三个动作其实都一样,只是具体算法不同。在抽象的世界里应该是下图这样
这样做的好处是如果以后要加入60人或者80人的地下城,程序的结构会非常清晰。
上面的结构其实就是策略模式的典型应用,当然到这里还没有结束。那么如何应用策略呢。
我想用伪代码的形式来说明策略模式的应用,分为不使用模式和使用模式:
1、应用策略模式之前,看到的应该是这样的逻辑:
//如果是10人地下城
//初始化10人地下城
//否则如果是25地下城
//初始化25人地下城
.....
2、应用策略模式之后,看到的应该是这样的逻辑:
//根据玩家人数初始化对应的地下城(统一入口)
不使用模式的做法在算法不是非常多的情况下非常适合。套用程序员的白话讲就是把代码逻辑写死。
但第二种更灵活,并且很方便扩展。因为人数是动态的,策略模式带来的好处是明显的,就是在程序运行时动态地替换算法。而不用把代码写死。
关于如何用代码实现策略模式,网上有很多文章,使了用各种语言,不管是C++,C#,Java还是动态语言来说明和讲解。都讲的很多,这里就不再重复。
最后来总结一下策略模式的使用,大体实现都是两步:
第一步:针对每种策略抽象各自的算法。使各算法可以互不影响。
第二步:提供统一入口。用于根据指定条件来替换算法。
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关推荐
魔兽世界网站WoWFailureCMS
魔兽世界全部API接口,帮忙制作WOW小工具,宏必备资料
电子书下载 : http://blog.csdn.net/good3651/article/details/53420721 -------阅读完本书,您将学会如何对魔兽世界界面进行自定义修改。如果您初学编程,将从本书学习到Lua和XML的基础知识,以及如何开始编写自己...
魔兽世界HTML模板 魔兽世界模板 网络游戏模板 HTML模板 网页界面设计 网络宣传模板
C# 开发的魔兽世界服务端模拟器源代码,仅供学习参考,对魔兽服务器感兴趣的朋友有福了。
魔兽世界CSS网页模板 红色 商务 网页 模板 游戏 魔兽 官网 商业 公司 设计 主页 HTML DIV+CSS 模板下载
内容概要:魔兽世界提取工具CASCExplorer 适合人群:需要得到魔兽世界资源文件的用户 可以做什么:可以提取模型、音效、资源,支持怀旧服 燃烧的远征 TBC WLK 使用建议: 运行的时候杀毒软件会检测为木马程序,需要...
C#写的魔兽世界登录器
魔兽世界图标大全,各式技能图片,装备图片,等等等等,应有尽有,走过路过不要错过
DirectX版本的WOW魔兽世界游戏客户端源码.zip
魔兽世界数据库 翻译工具 针对mangos服务器
魔兽世界MANGOS数据库分析
开源的魔兽世界参考架构,分析了当下魔兽世界的服务器架构后,利用提供的开源服务器框架mangos来搭建属于自己的魔兽世界服务器!
魔兽世界单机的数据库的表名注释,数据库的注释 玩单机的人用的
该资源是中国大学MOOC网站上北京大学开设的《C++程序设计与算法-3》的最终大作业,博主在倍速看完后,使用QT完全由自己编写而成。由于考虑到程序的整体架构清晰明白,分了好几个类文件,后来看了网上其他同学的代码...
魔兽 世界 TBC 怀旧服 防离线 跳跳 可隐藏窗口 C++ MFC 大湿兄作品!游戏自动跳跳防AFK 支持 自动按空格 取消 隐藏以及显示游戏。方便在公司玩。支持最小化到托盘 魔兽世界防AFK掉线
魔兽世界lua插件开发教程
大芒果_魔兽世界_mysql_数据库_详解.docx
集合了3000多张魔兽世界ui图集,欢迎下载。魔兽世界图标UI集