Head First 设计模式之入门
2012-11-17 15:47 ...平..淡... 阅读(185) 评论(0) 编辑 收藏 举报开启自己的设计模式学习。先来用一个老套的鸭子的例子做介绍,来初涉设计模式领域。
Duck具有功能:
但继承Duck类的子类在fly和quack方法上,会有改变。
修改后,最终效果为:
设计原则:
(1)从基类找出应用中可能需要变化之处,把它们独立出来,不要把它们和不需要变化的代码混在一起。 (把这些需要改变的行为用分别创建接口来表示)
(2)针对接口编程,而不是针对实现编程。 (创建子类实现接口,将具体实现放在这些子类中;而不是直接定义在Duck类中,或者Duck的子类中)
一、分析: "针对接口编程"真正含义是"针对超类型编程"。针对接口编程,关键在于多态。 例子: 针对实现编程:Dog d = new Dog(); d.bark(); //变量d为Dog类型,会造成我们必须针对具体实现编程。 针对接口编程:Animal animal = new Dog(); animal.makeSound(); //我们知道对象是Dog,但我们现在利用animal进行多态的调用。 我们不需要知道实际的子类型是什么,我们只关心他知道如何正确地进行makeSound就行了。 二、比较 以前的做法是:行为来自Duck超类的具体实现;或者是继承某个接口并由子类自己实现。 这两种做法都是依赖于"实现"。 新的设计方法:Duck的子类使用接口(FlyBehavior/QuackBehavior)所表示的行为。所以实际的"实现"不会被绑定在子类中。
换句话说,特定的行为编写在实现了FlyBehavior/QuackBehavior的类中。
(3)favor composition over inheritance.(多用组合,少用继承)
(4)为了交互对象之间的松耦合设计而努力
continue my dream...