大师与门徒……

大师:我说蚱蜢呀!距离我们上次见面已经有些时日,你对于继承
的冥想,可有精进?
门徒:是的,大师。尽管继承威力强大,但是我体会到它并不总是能够实现
最有弹性和最好维护的设计。
大师:啊!是的,看来你已经有所长进。那么,告诉我,我的门徒,不通过继承
又能如何达到复用呢?
门徒:大师,我已经了解到利用组合(composition)和委托(delegation)可以在
运行时具有继承行为的效果。
大师:好,好,继续……
门徒:利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会
继承到相同的行为。然而,如果能够利用组合的做法扩展对象的行为,就可以在
运行时动态地进行扩展。
大师:很好,蚱蜢,你已经开始看到组合的威力了。
门徒:是的,我可以利用此技巧把多个新职责,甚至是设计超类时还没有想到的
职责加在对象上。而且,可以不用修改原来的代码。
大师:利用组合维护代码,你认为效果如何?
门徒:这正是我要说的。通过动态地组合对象,可以写新的代码添加新功能,而
无须修改现有代码。既然没有改变现有代码,那么引进bug或产生意外副作用的机
会将大幅度减少。
大师:非常好。蚱蜢,今天的谈话就到这里。希望你能在这个主题上更深入……
牢记,代码应该如同晚霞中的莲花一样地关闭(免于改变),如同晨曦中的莲花一
样地开放(能够扩展)。


原文链接: http://www.dlog.cn/nicholascoder/diary/46301325

你可能感兴趣的:(大师与门徒……)