老潘已转到http://www.panxingzhi.net/。所有旧文章如有改动,此处将不再更新。谢谢。 I've moved to http://www.panxingzhi.net/. Updates on old posts are not applied here. Thanks.

favor composition over inheritance?

无数设计书都叫嚣着这个标题,是为什么呢?

我觉着是因为大多数OO语言里,继承关系是不能在运行时动态改变的,但composition就可以啊,君不见那么多的Java getters/setters。

但如果继承关系能在运行时改变呢??比如Python这样的,且不说把基类换掉这种极端做法了,就说运行时可以override父类方法,我觉得就避免了Java中继承带来的问题啊。这样的话,Strategy模式还有意义么?有么??没有么??

说的抽象一点,如果语言本身不够灵活,你就只能利用它有限的一点灵活度,来尽量避免一些僵硬的设计。但如果语言足够灵活呢?我倒不是说这一定是好事。因为语言灵活,实现一个设计就会有好多灵活的方案,尤其像老潘这样喜欢玩儿数据和代码互换的,准保写出代码来让人丈二和尚。

所以说Java的方案是:语言僵死,然后拿一堆设计模式来进补。。。这样倒也好,适合工业大规模开发哈。但这样的话Java程序员就特别容易把事情想死,以为天下就只有这一种办法了。所以如果你是个Java程序员,你一定要小心脑电路栓塞或者冠状思想硬化这样的毛病。我见过的不在少数。

我现在特别庆幸我是先学动态语言,后学设计模式。。。





1 条评论:

  1. jay, 2009-08-25 14:43:32  [回复]
    只有一把锤子,怎么把东西都变成钉子呢,用“设计模式”就行了。。

添加评论