为何大量设计模式在动态语言中不适用?
有些设计模式仅仅是为了克服静态语言的缺点而存在 ========================================== 划个重点“有些”，原文中也说了，23个pattern中的16个，说明还有7个是适用的。其他的也并不是不适用，而是有更简单的设计，通常是直接使用类或者callable来代替接口。 而且相同的问题在动态语言当中往往可以有多得多的设计方式，不同设计方式有不同的特点和优劣，并没有窘迫到只有一种方式能实现。 ========================================== 本质上来说，动态语言的多态要比静态语言的多态更纯粹。Java的多态基于interface和类继承，可以说完全是受实现的性能要求（包括编译和运行）的妥协。而动态语言，以Python为例，本质上来说其实只有两个多态的点：callable和getattr 更重要的是这两条原则不需要任何的声明就能够成立，这样设计上来说要比基于interface和显式定义简洁得多。具体到Python，所有其他特性可以说都是在这个基础上成立的： 因为这些特性，原来的所谓设计原则，在动态语言中并不需要特别的设计： 可以看出，需要严格考虑得设计原则本来就要少得多，依赖倒转和最少知道两条足矣。 因为这些特性，许多以前在Java中需要技巧实现的场景，在Python中都可以用直接的方式实现，比如：