策略模式
使用继承可以实现代码的复用,比如提取子类中共同的行为。
1 | class Ducker{ |
有一个问题是,fly的行为可能因“类”而异。譬如唐老鸭就不会飞。怎么解决?
设计原则:把易变的部分抽取出来,与不变的部分独立开。
使用接口来抽象易变的代码怎么样?
1 | interface Flyable(){ |
这样处理的问题是,每一个子类都要实现接口,无法复用!怎么解决?
给飞行的行为提供具体的实现类:
1 | class FlyWithWings implements Flyable{ |
让鸭子的子类自己去选择飞行的方式(委托给行为类):
1 | class Ducker{ |
可以发现,使用组合来实现复用的。
组合是一个“has-a”的关系。
继承是一个“is-a”的关系。
设计原则:多用组合,少用继承。
行为可以理解成不同的算法,把算法提取出来,与让对象自由的选择。这就是策略模式。
设计原则:面向接口编程
设计模式是一种思想,让代码看起来更加清晰,维护起来更加容易。