- 软件开发的一个不变真理是:change!
- 库与框架无法帮助我们将应用组织成容易理解、容易维护、具有弹性的架构,所以需要设计模式
策略模式
定义了算法族,分别封装起来(封装在一组类中,可以被轻易的扩充与改变),让它们之间可以相互替换。
此模式让算法的改变独立于使用算法的客户。
设计原则:
1、“封装变化”。找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码放在一起。
2、针对接口编程,而不是针对实现编程。
3、对用组合,少用继承。
(组合是运行时动态调用,可以在运行时动态改变行为,因为我们可以更换不同的实现。
继承是编译时静态决定了的)
组 合 、继 承 对比
1、组合(优点):不破坏封装,整体类与局部类之间松耦合,彼此相对独立
继承(缺点):破坏封装,子类与父类之间紧密耦合,子类依赖于父类的实现,子类缺乏独立性
2、组合(优点):具有较好的可扩展性
继承(缺点):支持扩展,但是往往以增加系统结构的复杂度为代价
3、组合(优点):支持动态组合。在运行时,整体对象可以选择不同类型的局部对象
继承(缺点):不支持动态继承。在运行时,子类无法选择不同的父类
4、组合(优点):整体类可以对局部类进行包装,封装局部类的接口,提供新的接口
继承(缺点):子类不能改变父类的接口
5、组合(缺点):整体类不能自动获得和局部类同样的接口
继承(优点):子类能自动继承父类的接口
6、组合(缺点):创建整体类的对象时,需要创建所有局部类的对象
继承(优点):创建子类的对象时,无须创建父类的对象
类图
以《Head First Design Patterns》中鸭子为例。
(转载请注明出处 ^.^)