# 设计模式与足球(四)
行为型模式(下)
意大利昨晚太杯具了!!!不说了,继续把最后一部分写完。
(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): 表示一个作用于某对象结构中的各元素的操作,可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
因才疏学浅,部分设计模式的解释难免有点牵强,仅供大家茶余饭后娱乐娱乐,请笑纳!
- Introduction
- 基础知识
- 设计模式概述
- 从招式与内功谈起——设计模式概述(一)
- 从招式与内功谈起——设计模式概述(二)
- 从招式与内功谈起——设计模式概述(三)
- 面向对象设计原则
- 面向对象设计原则之单一职责原则
- 面向对象设计原则之开闭原则
- 面向对象设计原则之里氏代换原则
- 面向对象设计原则之依赖倒转原则
- 面向对象设计原则之接口隔离原则
- 面向对象设计原则之合成复用原则
- 面向对象设计原则之迪米特法则
- 六个创建型模式
- 简单工厂模式-Simple Factory Pattern
- 工厂三兄弟之简单工厂模式(一)
- 工厂三兄弟之简单工厂模式(二)
- 工厂三兄弟之简单工厂模式(三)
- 工厂三兄弟之简单工厂模式(四)
- 工厂方法模式-Factory Method Pattern
- 工厂三兄弟之工厂方法模式(一)
- 工厂三兄弟之工厂方法模式(二)
- 工厂三兄弟之工厂方法模式(三)
- 工厂三兄弟之工厂方法模式(四)
- 抽象工厂模式-Abstract Factory Pattern
- 工厂三兄弟之抽象工厂模式(一)
- 工厂三兄弟之抽象工厂模式(二)
- 工厂三兄弟之抽象工厂模式(三)
- 工厂三兄弟之抽象工厂模式(四)
- 工厂三兄弟之抽象工厂模式(五)
- 单例模式-Singleton Pattern
- 确保对象的唯一性——单例模式 (一)
- 确保对象的唯一性——单例模式 (二)
- 确保对象的唯一性——单例模式 (三)
- 确保对象的唯一性——单例模式 (四)
- 确保对象的唯一性——单例模式 (五)
- 原型模式-Prototype Pattern
- 对象的克隆——原型模式(一)
- 对象的克隆——原型模式(二)
- 对象的克隆——原型模式(三)
- 对象的克隆——原型模式(四)
- 建造者模式-Builder Pattern
- 复杂对象的组装与创建——建造者模式(一)
- 复杂对象的组装与创建——建造者模式(二)
- 复杂对象的组装与创建——建造者模式(三)
- 七个结构型模式
- 适配器模式-Adapter Pattern
- 不兼容结构的协调——适配器模式(一)
- 不兼容结构的协调——适配器模式(二)
- 不兼容结构的协调——适配器模式(三)
- 不兼容结构的协调——适配器模式(四)
- 桥接模式-Bridge Pattern
- 处理多维度变化——桥接模式(一)
- 处理多维度变化——桥接模式(二)
- 处理多维度变化——桥接模式(三)
- 处理多维度变化——桥接模式(四)
- 组合模式-Composite Pattern
- 树形结构的处理——组合模式(一)
- 树形结构的处理——组合模式(二)
- 树形结构的处理——组合模式(三)
- 树形结构的处理——组合模式(四)
- 树形结构的处理——组合模式(五)
- 装饰模式-Decorator Pattern
- 扩展系统功能——装饰模式(一)
- 扩展系统功能——装饰模式(二)
- 扩展系统功能——装饰模式(三)
- 扩展系统功能——装饰模式(四)
- 外观模式-Facade Pattern
- 深入浅出外观模式(一)
- 深入浅出外观模式(二)
- 深入浅出外观模式(三)
- 享元模式-Flyweight Pattern
- 实现对象的复用——享元模式(一)
- 实现对象的复用——享元模式(二)
- 实现对象的复用——享元模式(三)
- 实现对象的复用——享元模式(四)
- 实现对象的复用——享元模式(五)
- 代理模式-Proxy Pattern
- 设计模式之代理模式(一)
- 设计模式之代理模式(二)
- 设计模式之代理模式(三)
- 设计模式之代理模式(四)
- 十一个行为型模式
- 职责链模式-Chain of Responsibility Pattern
- 请求的链式处理——职责链模式(一)
- 请求的链式处理——职责链模式(二)
- 请求的链式处理——职责链模式(三)
- 请求的链式处理——职责链模式(四)
- 命令模式-Command Pattern
- 请求发送者与接收者解耦——命令模式(一)
- 请求发送者与接收者解耦——命令模式(二)
- 请求发送者与接收者解耦——命令模式(三)
- 请求发送者与接收者解耦——命令模式(四)
- 请求发送者与接收者解耦——命令模式(五)
- 请求发送者与接收者解耦——命令模式(六)
- 解释器模式-Interpreter Pattern
- 自定义语言的实现——解释器模式(一)
- 自定义语言的实现——解释器模式(二)
- 自定义语言的实现——解释器模式(三)
- 自定义语言的实现——解释器模式(四)
- 自定义语言的实现——解释器模式(五)
- 自定义语言的实现——解释器模式(六)
- 迭代器模式-Iterator Pattern
- 遍历聚合对象中的元素——迭代器模式(一)
- 遍历聚合对象中的元素——迭代器模式(二)
- 遍历聚合对象中的元素——迭代器模式(三)
- 遍历聚合对象中的元素——迭代器模式(四)
- 遍历聚合对象中的元素——迭代器模式(五)
- 遍历聚合对象中的元素——迭代器模式(六)
- 中介者模式-Mediator Pattern
- 协调多个对象之间的交互——中介者模式(一)
- 协调多个对象之间的交互——中介者模式(二)
- 协调多个对象之间的交互——中介者模式(三)
- 协调多个对象之间的交互——中介者模式(四)
- 协调多个对象之间的交互——中介者模式(五)
- 备忘录模式-Memento Pattern
- 撤销功能的实现——备忘录模式(一)
- 撤销功能的实现——备忘录模式(二)
- 撤销功能的实现——备忘录模式(三)
- 撤销功能的实现——备忘录模式(四)
- 撤销功能的实现——备忘录模式(五)
- 观察者模式-Observer Pattern
- 对象间的联动——观察者模式(一)
- 对象间的联动——观察者模式(二)
- 对象间的联动——观察者模式(三)
- 对象间的联动——观察者模式(四)
- 对象间的联动——观察者模式(五)
- 对象间的联动——观察者模式(六)
- 状态模式-State Pattern
- 处理对象的多种状态及其相互转换——状态模式(一)
- 处理对象的多种状态及其相互转换——状态模式(二)
- 处理对象的多种状态及其相互转换——状态模式(三)
- 处理对象的多种状态及其相互转换——状态模式(四)
- 处理对象的多种状态及其相互转换——状态模式(五)
- 处理对象的多种状态及其相互转换——状态模式(六)
- 策略模式-Strategy Pattern
- 算法的封装与切换——策略模式(一)
- 算法的封装与切换——策略模式(二)
- 算法的封装与切换——策略模式(三)
- 算法的封装与切换——策略模式(四)
- 模板方法模式-Template Method Pattern
- 模板方法模式深度解析(一)
- 模板方法模式深度解析(二)
- 模板方法模式深度解析(三)
- 访问者模式-Visitor Pattern
- 操作复杂对象结构——访问者模式(一)
- 操作复杂对象结构——访问者模式(二)
- 操作复杂对象结构——访问者模式(三)
- 操作复杂对象结构——访问者模式(四)
- 设计模式趣味学习(复习)
- 设计模式与足球(一)
- 设计模式与足球(二)
- 设计模式与足球(三)
- 设计模式与足球(四)
- 设计模式综合应用实例
- 多人联机射击游戏
- 多人联机射击游戏中的设计模式应用(一)
- 多人联机射击游戏中的设计模式应用(二)
- 数据库同步系统
- 设计模式综合实例分析之数据库同步系统(一)
- 设计模式综合实例分析之数据库同步系统(二)
- 设计模式综合实例分析之数据库同步系统(三)