二、针对接口(超类型:Java中的interface和abstract class)编程,不针对实现编程
定义和实现一个类时,我们时刻要注意的就是它说提供的接口是否符合它体现的抽象层次。比如一个“书”的类里包含了“获取书名、作者名”等书本信息是合理的,但要出现“扫地”等方法,就是显得不合乎逻辑了。所以,每公开或隐藏一个方法或属性时,就要问问自己,我这么做是否符合了该类所在的抽象?
在接近(也可能达到)了这一目标后,实现接口提供的方法可能有很多种不同的实现方法,我们就可以不必把这些实现“硬编码”进方法里,可以其中一些“行为类”,把实现转交给这些行为类来进行,这样就可以从行为中解耦出来,具有更富弹性的类(比如能动态指定行为)。但副作用也是显而易见的:会因此多出许多额外的类来(类个数急剧膨胀)。
策略模式就是这么做的,可以参考第一条原则。
评论
发表评论