一、如何找类及其方法。以前的办法是根据用例找其中的名次和动词,这个方法常常会产生超出我们需要的庞大类层次或者偏离需求的类。而James R.Trott的观点是根据使用的共性和可变性分析作为主要的工具,这要优于仅仅关注名词和动词。
根据共性和可变性找出来的类又如何找他们的方法呢?我们要知道类的一个基本原则:对象应该只对自己负责。因此答案也就很明显了,找方法其实就是在找这个类的责任是什么。
二、找到了类后如何进行类和接口的设计。在设计以应对变化的过程中,应该遵循的两个基本策略。
* 找出变化并封装之。
* 优先使用对象聚集而不是继承。
我现在已经看了Facade,Strategy,Adapter,Bridge,三个模式,下面是设计类的一些心得。
a, 有了类和方法,找出共性的方法将其抽象,特殊的方法抽出来定义到接口里。
b, 如果方法里所使用的对象多变(对象多态),那么把变化的对象抽出来进行封装。这里用到了Strategy模式。
c, 如果方法的实现多变,那么根据对象与实现解耦原则,把变化的方法抽象出来进行封装。这里用到的是Bridge模式。
d, 如果当前类需要使用到另一个系统已实现的部分方法时,我们并不想关心该系统内部的具体实现,那么定义接口以供当前类调用。这里用到的是Facada模式。
e, 如果当前类需要使用另一个类/接口已实现的方法,那么我们采用Adapter模式。
Adapter模式有两种。
* 对象Adapter模式-------用当前的子类(适配对象)去包含另一个对象(被适配的对象),说白了就是在子类定义被使用的类/接口作为属性。
* 类Adapter模式----------采用多重继承,让子类继承被使用的对象,这时候这个对象只能是接口。
注意:很多人会觉得Facada和Adapter挺像的,其实他们的差别比较微妙。Facada至于一个非常庞大的对象面前,它隐藏了多个类;而Adapter通常只隐藏一个,用来包装几个共同实现所需功能的小对象也是可能的。结论:Facada简化了接口,而Adapter将一个接口转化为另一个接口。
(路过的高手,哪里有不对的请指正^-^。To be continue)