说到策略模式,大家容易联想到战术、套路。商家在做销售的时候,针对不同的消费群体而制定不同的推销策略。对了策略模式而言,跟其他的设计模式一样。原本没有的路,人走多了,自然就有了套路。这里就策略模式的套路进行解析。
一个例子
要用什么例子来讲解,我想了很久。诸如一些计税规则几何计算规则等等。但是这些例子一个比较老旧,而且简单的体现不出模式好处,复杂的却也晦涩。我想找一个更加有趣贴近日常的例子。一款火爆了一年的手机游戏,王者荣耀,我想从他身上了挖掘一些例子来使用。大家或多或少都玩过农药。我得说明一点,我不是员工也不是枪手,因此下面讨论的用例仅仅是个推测和假设,可能对大家的段位提升没有太大的作用。哈哈。
只要玩过应该都知道这个游戏在一个5V五的对局里面,玩家等级差距通常不会很大。如果比赛玩家级别相差太大,分配不均衡,出现了比赛一边倒的情况,会大大的影响游戏的体验。因此,就有这么一个匹配机制,确保匹配在一起玩的玩家水平在一个合理的范围之内。(当然,实际的表现大家有目共睹)
流程图分析如下:
现在先来分析下这个匹配机制应该如何实现。假设我们知道他是怎么运作的。玩家跟系统没有多大关系,而贯穿这个用例的是玩家比赛中产生的数据,也就是局内表现数据,匹配机制会根据玩家的局内表现数据,来决定下一场匹配规则于是我们将他们抽象成如下关系。
根据上面的UML,我们先来简单的实践一下。当然,这里用的是java来实现。在实际游戏中高并发的环境中,很有可能是满足不了要求,特别是绝对数据的生成。不过匹配机制的操作是比赛结束的后期产生的。对并发也许要求并不是很高,因此案java的方式来实现也不是不可能。
实现例子的功能
我们先根据需求进行编写:
局内表现类
public class GameScore {
private int playerID;//玩家id
//众所周知的kda数据
private int avgKill;