2015-07-10 65 views

回答

1

我建议这个职位从Donal Fellows on Programmers

一些语言是相当强烈的静态的,只允许两个类之间的继承关系的 规范在 这些类定义的时间。对于C++,定义时间为 几乎与编译时间相同。 (它在 Java和C#中略有不同,但不是很多)。其他语言允许动态重新配置类(以及Javascript中类对象类型的对象)的关系;有些甚至允许修改现有对象的 类,或者改变 类的超类。 (这可能会导致总逻辑混乱,同时也可以 模型现实世界中的脏东西相当不错的。)

但对比这组成,其中一个物体和另一个的 关系不是他们 类定义是很重要的关系(即,他们的类型),而是由参考文献 ,每个关系与另一个。通用组合是一种非常强大而且无处不在的安排对象的方法:当一个对象 需要知道另一个对象时,它会引用该对象并根据需要在其上调用方法。只要你 开始寻找这种超级基本模式,你会发现它绝对无处不在,你会发现它 ;避免它的唯一方法是把所有的 都放在一个对象中,这将会非常愚蠢! (还有更严格的 UML组合/汇聚,但这不是GoF的书是什么 谈论那里。)

一个关于组合关系的事情之一是, 特定对象不需要是硬约束,以彼此。具体对象的 模式非常灵活,即使在非常静态的 语言(如C++)中也是如此。 (让事情非常静态是有好处的: 可以更密切地分析代码,并且至少有可能在更少的开销下发布更好的代码。)回顾一下,与许多其他动态语言一样,可以使用Javascript假装它 根本不使用汇编;当然只是假装,但是基础语言模型不需要转换为固定的中间格式(例如,“磁盘上的二进制可执行文件”)。编译完成的操作在运行时完成,如果事情变化太大,可以轻松重做 。 (迷人的是,这样的编译好的 工作就可以完成,甚至从一个非常有活力的 基础开始...)

一些GOF模式才真正有意义的语言 的背景里的东西是相当稳定。没关系;它只是意味着并不是所有影响模式的力量都必须列出。关于学习模式的一个关键点 是它帮助我们了解这些重要的差异和注意事项。 (其他图案更普遍 保持你的眼睛为这些开放。)

profile for 74U n3U7r1no at Stack Overflow, Q&A for professional and enthusiast programmers