“君子和而不同,小人同而不和”,趣谈继承与组合

设计模式里有一个“合成/聚合复用原则(CARP)”,尽量使用合成/聚合(Has-A),尽量不要使用类继承(Is-A),即合成/聚合优于集成。

 

集成,我若要有你的功能,我必须是一个你。

合成/聚合,我可以承担你的职责,但我还是我。

 

看到这句话,突然想起古语论君子与小人,“君子和而不同,小人同而不和”。

和,责任与行为;同,外在表现与类族。

 

继承是一家独断;合成/聚合是百花齐放。

继承是祖国山河一片红,人人唱红歌;合成/聚合是个性张扬,但同有一个中国心。

 

继承,应对变化的方式是表象一致,人手一块红布(不管手里的红布与别人一样还是不一样!)。

合成/聚合,红心在我心,心映红布(相同的红布总是只有一块;但每个人中意的红布自己选)。

 

就为了达成某个相同目标而言,继承与“合成/聚合”的主要区别在于,

继承要求我必须是你,要有红心必须有红布。

合成/聚合只要求有红心,红布可共用别人的红布

 

(类比比较,有点类似于C语言中的传值与传址——“完全拷贝一份”vs“只拷贝地址”)

 

你是需要人人都披红?还是需要人人有红心?

你喜欢君子?还是喜欢小人?

posted @ 2011-09-18 14:11  漂泊的笨笨  阅读(318)  评论(0编辑  收藏  举报