• 如何设计构造函数


    构造函数是一般类对象的入口点,Java允许构造函数直接相互嵌套调用(本例中不讨论父类构造函数继承性调用问题),当设计出一个相对复杂庞大,成员变量比较多的类的时候,如何安排布局多个构造函数方法体内容,减少代码拷贝,实现优质的成员变量初始化过程,每次都会让我十分纠结,直到现在还是。

    也许一些优秀的框架代码或编程思想、代码之禅、编程艺术、编程匠艺、码农后花园等等这类书籍中,会蕴含关于这方面的更好的解决方案,但我目前情况看来,对优秀源代码的阅历尚浅,无法思索得出相关结论,总结一个字,懒。。

    最近花了一段时间,在不断整理几个类的时候,偶然觉得自己想通了一些关于这方面的设计方式,姑且总结了一下,算是模式的一种吧

     

    在类中设计如下三个(三种)经典构造函数:

    • 最小必要参数,体现为形参列表最短的构造方法,包括无参构造函数,方法体中包含初始化所有必要的核心成员变量(可能通常声明为 final 类型),优先考虑调用setter方法初始化参数
    • 最大可设置参数,体现为形参列表最长最复杂的构造方法,方法体中包含初始化所有成员变量,提供最细微最全面的成员变量自定义指定,调用上面的 最小必要参数构造函数 初始化核心参数项,并选择性的提供参数 null 值支持,优先考虑调用setter方法初始化参数
    • 常用参数组,体现为形参列表中等长度的构造方法,调用上面的 最大可设置参数构造函数 ,选择性初始化常用参数项,根据实际需要可设置复数个此类构造方法,适应有限的多种常用用例场景。

    实际上这种设计方式应用在工厂模式上更合理,不过简单的情况讨论差不多就这样子吧。

  • 相关阅读:
    [hdu2196]Computer树的直径
    [poj2342]Anniversary party树形dp入门
    链式前向星模板
    LintCode-50.数组剔除元素后的乘积
    Markdown的基本语法
    LintCode-8.旋转字符串
    LintCode-1.A + B 问题
    LintCode-61.搜索区间
    LintCode-88.最近公共祖先
    LintCode-54.转换字符串到整数
  • 原文地址:https://www.cnblogs.com/wavky/p/3473177.html
Copyright © 2020-2023  润新知