设计模式与足球(四)

行为型模式(下)

意大利昨晚太杯具了!!!不说了,继续把最后一部分写完。

(18) 备忘录模式:足球是圆的,一切皆有可能发生。要是有后悔药的话,如果能回到昨晚2012年欧洲杯决赛的中场休息,我相信普兰德利一定不会用莫塔换下蒙托利沃;如果能回到昨晚比赛开始,我相信一开始就不会让基耶利尼上场,如果能回到......(再回可能意大利就被德国淘汰了,微笑)能回到吗?回不到哦,要是能回到过去的话我还真想再过一次20岁(回忆那段青葱岁月),可惜人生没有后悔药啊。幸好软件系统中可以通过备忘录模式来实现对象的状态恢复,备忘录就是软件中的后悔药,它就是软件中的月光宝盒。Ctrl + Z,撤销随你!

备忘录模式(Memento): 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到先前保存的状态。

(19) 观察者模式:教练大手一挥,全线压上。此时,教练是观察目标,球员是观察者,观察目标与观察者之间有一对多的联动,当然裁判也可以看成是球员的观察目标,终场哨一吹,西班牙乐成一片,意大利哭成一片,不同的观察者反应还真的有所不同,大笑。

观察者模式(Observer): 定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。

(20) 状态模式:踢足球是要看状态的,当然状态是会转换的。有的球员上场时状态不行,老是“思考人生”,此时处于“梦游状态”;踢着踢着状态好起来了,头顶脚踢,运气好的话还能进球,此时处于“亢奋状态”;然后随着体力下降,动作变形,射门软绵无力,一碰就倒,此时又处于“体力透支状态”。随着比赛的进行,这几个状态会发生转换,而且在不同状态下球员的行为也不同,在梦游状态下基本上没有射门,在亢奋状态下基本上没有传球(全自己射了),在体力透支状态下基本上没有抢断(自己都拿不稳了,还抢啥抢)。如果将每一种状态封装在一个状态类中,那么球员就是拥有状态的环境类了。 状态模式(State): 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它所属的类。

(21) 策略模式:据说1863年足球刚开始的时候流行1-0-9阵型,1个后卫,9个前锋,木有越位,惊讶。随着足球的发展,现代足球阵型的变化越来越多,面对防守型球队,可以选择3-5-3阵型,面对攻击性强的球队,可以选择5-4-1阵型,当然还有经典的4-4-2。每一种阵型都是一种策略,面对不同的对手可以选择不同的策略。

策略模式(Strategy): 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换,策略模式使得算法的变化可独立于使用它的客户。

(22) 模板方法模式:“角球!这是意大利的机会,今天意大利面对全面占优的西班牙办法不多,定位球可能是最有效的破门方式了。皮尔洛开出一个战术角球,传给卡萨诺,卡萨诺传前点,马尔基西奥头球抢点,球顶高了。不过这次角球配合设计得很精妙,给西班牙带来了威胁,可惜整场比赛这种机会不多啊!!”。在战术角球中,A开球、B传球、C抢点再射门,这是一个战术的框架,当然C到底是抢前点还是抢后点可以根据实际情况来选择,如果将踢战术角球设计为一个模板方法,那么每一个步骤就是其中要调用的基本方法了,而且在不同战术中某些具体步骤的实施还各不相同。Perfect!真是模板方法模式的非典型应用!

模板方法模式(Template Method): 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

(23) 访问者模式:有些从事足球比赛研究的人很喜欢数据。有的专门研究一场比赛中每个球员的跑动距离,有的研究每个球员的抢断次数,有的研究每个球员的射门次数,有的研究球员传球次数,有的研究球员传球成功率......如果将每一种研究类型看成一个访问者,那么球队就是一个包含多个队员元素的对象结构,以供不同访问者来研究,微笑,当然,我们还可以很方便地增加新的访问者(研究者),例如,研究每个球员在比赛中吐口水的次数,研究每个球员在比赛中与对方球员“亲密接触”次数......

访问者模式(Visitor): 表示一个作用于某对象结构中的各元素的操作,可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

因才疏学浅,部分设计模式的解释难免有点牵强,仅供大家茶余饭后娱乐娱乐,请笑纳!

📚书籍推荐

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「IT平头哥联盟」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

results matching ""

    No results matching ""