最近在看《重构与模式》,里面提到Creation Method。
动机
(1)构造函数无法有效和高效的表达意图。如果一个类里有多个构造函数,那么使用这个累的人只能从文档上才能知道哪个构造函数创建了什么对象,而Creation Method可针对创建对象的特性来命名函数的名称,提高了代码的可读性。
(2)在添加构造函数时,会遇到签名与某个构造函数相同的情况,这样构造函数将无法添加。而Creation Method可任意命名,不存在方法签名的问题,当然Creation Method也可以重载。
(3)一般来说,现在的开发环境没有自动提示函数无调用的功能,所以,如果系统中某个类的某个构造函数没有调用者,这是很难被这个类的编写者发现的,因为构造函数的名称都是一样的,而如果采用Creation Method,则很容易通过Creation Method的名称来查找整个工程甚至整个解决方案的调用者。
前提以及缺点
通常,如果一个类拥有过多的构造函数,则说明此类的职责太多,所以运用“Creation Method替换构造函数”的重构的前提就是要考虑是否可以运用“提炼类(Extract Class)”重构方法来把这个类分解成若干个类。
这个重构的缺点在于它可能引入非标准的创建方式,如果大多数类都使用new实例化对象,而有些却使用一个Creation Method,那么程序员必须了解每个类的创建是怎样完成的。