favor composition over inheritance?
无数设计书都叫嚣着这个标题,是为什么呢?
我觉着是因为大多数OO语言里,继承关系是不能在运行时动态改变的,但composition就可以啊,君不见那么多的Java getters/setters。
但如果继承关系能在运行时改变呢??比如Python这样的,且不说把基类换掉这种极端做法了,就说运行时可以override父类方法,我觉得就避免了Java中继承带来的问题啊。这样的话,Strategy模式还有意义么?有么??没有么??
说的抽象一点,如果语言本身不够灵活,你就只能利用它有限的一点灵活度,来尽量避免一些僵硬的设计。但如果语言足够灵活呢?我倒不是说这一定是好事。因为语言灵活,实现一个设计就会有好多灵活的方案,尤其像老潘这样喜欢玩儿数据和代码互换的,准保写出代码来让人丈二和尚。
所以说Java的方案是:语言僵死,然后拿一堆设计模式来进补。。。这样倒也好,适合工业大规模开发哈。但这样的话Java程序员就特别容易把事情想死,以为天下就只有这一种办法了。所以如果你是个Java程序员,你一定要小心脑电路栓塞或者冠状思想硬化这样的毛病。我见过的不在少数。
我现在特别庆幸我是先学动态语言,后学设计模式。。。
1 条评论: