如何设计构造函数
构造函数是一般类对象的入口点,Java允许构造函数直接相互嵌套调用(本例中不讨论父类构造函数继承性调用问题),当设计出一个相对复杂庞大,成员变量比较多的类的时候,如何安排布局多个构造函数方法体内容,减少代码拷贝,实现优质的成员变量初始化过程,每次都会让我十分纠结,直到现在还是。
也许一些优秀的框架代码或编程思想、代码之禅、编程艺术、编程匠艺、码农后花园等等这类书籍中,会蕴含关于这方面的更好的解决方案,但我目前情况看来,对优秀源代码的阅历尚浅,无法思索得出相关结论,总结一个字,懒。。
最近花了一段时间,在不断整理几个类的时候,偶然觉得自己想通了一些关于这方面的设计方式,姑且总结了一下,算是模式的一种吧
在类中设计如下三个(三种)经典构造函数:
- 最小必要参数,体现为形参列表最短的构造方法,包括无参构造函数,方法体中包含初始化所有必要的核心成员变量(可能通常声明为 final 类型),优先考虑调用setter方法初始化参数
- 最大可设置参数,体现为形参列表最长最复杂的构造方法,方法体中包含初始化所有成员变量,提供最细微最全面的成员变量自定义指定,调用上面的 最小必要参数构造函数 初始化核心参数项,并选择性的提供参数 null 值支持,优先考虑调用setter方法初始化参数
- 常用参数组,体现为形参列表中等长度的构造方法,调用上面的 最大可设置参数构造函数 ,选择性初始化常用参数项,根据实际需要可设置复数个此类构造方法,适应有限的多种常用用例场景。
实际上这种设计方式应用在工厂模式上更合理,不过简单的情况讨论差不多就这样子吧。