工厂模式（factory Method）的本质是什么？为什么引入工厂模式？
以前其实应该说过这个问题的。C++和Java设计的时候搞砸了一件事情，就是class不是对象，因而不能像一般的对象一样支持多态。 以下操作从面相对象的角度来说，如果类也是对象，本来应当被解释为类的方法： 但是出于实现简洁和效率的双重要求，这两个语言都不可以将类当作普通对象来处理，因此像new这样的操作就一定需要指定一个类，而不能指定一个参数（C++模板可以通配，但本质上还是需要编译时确定；Java generic不可以new参数类型）。 这样的结果自然是有所牺牲的，如果类是对象而以上三者是类对象的方法，那就可以将类作为一个普通函数参数一样使用，例如可以通过传入的类来创建相应的对象，而目前两种语言都不能直接这么做。作为折衷方案，Java可以使用反射，在不使用反射的情况下就需要将这些操作重新封装为某个对象的方法。在Java和C++中，这个对象自然需要一个自己的类，一般这个类就叫做工厂类。 注意到以上的讨论中，引入工厂的前提是需要多态。不过偶尔也有不需要多态的情况下也用工厂类，这时候为什么不直接改成构造函数或者静态函数呢？一般是工程上的原因，比如说这个类因为各种原因不方便修改，从外面创建一个Helper类可以减少侵入型。这种有的时候也叫Factory。