漫谈设计模式 —— 职责的封装

前两篇文章介绍了创建封装的模式结构封装的模式,这次我们接着来看剩下的模式。分别有:策略模式、迭代器模式、命令模式、模板方法模式、观察者模式、责任链模式、状态模式、解析器模式、备忘录模式、访问者模式、中介者模式。这些模式的共同点是职责的封装。他们都是把一部分职责从原有的对象中抽离出来,封装成一个单独的对象,达到不同的目的。

最简单的就是策略(Strategy)模式

Strategy

策略模式就是把某一部分职责,例如角色的攻击抽离出来,单独封装成一个类,然后派生不同的实例,实现不同的攻击方式。这样原有的角色类就不再需要为攻击的多样化而操心了,利用接口的形式解耦后角色可以动态配上不同的攻击行为。

另一个常见的迭代器(Iterator)模式也是同样的思路,把遍历管理器内元素的职责从管理器中抽离出来,单独封装成一个迭代器类,这样可以使得管理器接口更加简单,并且只专注于管理元素。不同的是,根据管理器使用的容器结构,迭代器会有对应的一个实现,所以管理器与迭代器是绑定的,不会像上面策略模式那样动态替换。

以上两个模式都致力于对象与行为解耦,再推进一步,操作可变,并且操作的对象也可变,这样的需求该怎么组织呢?例如游戏正常状态下,按下键盘w键是控制角色往前移动,而在剧情模式下,按下键盘w键是控制摄像机围绕剧情所在场景转动。对于这种需求,命令(Command)模式可以派上用场。

Continue reading