这次看的是实体书, 中文版2007年9月第1版. 第一章p1~p35.
概述
之前看过一次这本书, 不过印象不深刻, 平时也不太会用, 这次借着和群友一起看的机会, 再复习一次. 目标是每章都有代码, 最好和工作中的实例结合起来.
Duck
Duck是经典的模型. Duck基类有2种行为, fly()
和quack()
, 如果是直接继承, 那么所有Duck的子类都会飞, 但是橡皮鸭(橡皮鸭算不算鸭??)不会飞.
那么继承就不合适, 但是如果每个子类都自己实现一遍, 代码又没有得到复用(例如鸭子类型A和类别B的代码是一样的).
这种时候就需要抽象一个飞行行为接口FlyBehavior
, 定义方法fly(), 然后定义不同的实现类FlyWithWings, FlyNoWay等. 每种鸭子看情况使用不同的实现类.
Duck中添加一个属性FlyBehavior, 可以在子类初始化时指定特定的FlyBehavior实现类. 也可以添加一个方法setFlyBehavior(FlyBehavior flyBehavior), 可以动态改变行为, 一会让鸭能飞, 一会让鸭不能飞(似乎没有用处...).
游戏中的人物战斗
这个例子适合动态改变行为.
游戏中有很多人物, 有国王, 骑士, 王后. 有很多种武器, 有斧头, 剑, 弓箭等. 人物可以佩戴不同的武器, 可以切换武器, 先拿斧头, 再换剑.
写日志的场景分析
之前用果log4net, 分析下这个场景