java - 构造函数的设计模式

标签 java design-patterns constructor

我遇到了一个设计问题,我将在下面进行描述。

假设一个类,称之为 A,有一个带有一堆参数的构造函数。由于在每个实例化中都写所有这些参数又累又脏,我写了另一个类,称之为 StyleSheetA,它封装了所有这些参数,并且是 A 的构造函数的唯一参数。这样,​​我可以准备一些默认值StyleSheet是以后要用到的模板,需要的话我可以修改。

此时,我需要扩展A。假设B 扩展了A。B 将有自己的样式表,即StyleSheetB。我觉得StyleSheetB extends StyleSheetA 会很合适,这样B的构造函数只要有一个stylesheet参数,也可以构造它的父类(super class)A。但是我担心这样的设计有可能存在缺陷。例如,如果我决定为样式表添加 getter/setter 怎么办?有没有一种新颖的方法来处理所有这些情况?我走错了吗?对于那些感到困惑的人,我在这里附上一些代码:


    class A
    {
        StyleSheetA ss;

        A(StyleSheetA ss)
        {
            this.ss = ss;
            // Do some stuff with ingredients of styleSheet
        }
    }
    class StyleSheetA
    {
        int n1;
        int n2;
        // :
        // :
        int n100;
    }

    class B extends A
    {
        B(StyleSheetB ss)
        {
            super(ss);
            // Do some stuff with ingredients of styleSheet
        }
    }
    class StyleSheetB extends StyleSheetA
    {
        int n101;
        int n102;
        // :
        // :
        int n200;
    }

感谢您的任何帮助或建议,我们也将不胜感激您的任何批评。

编辑:我正在用 java me 开发,所以没有泛型支持。

最佳答案

在我看来,您只是将参数过多的问题从 A 类转移到了 StyleSheetA 类。

为了说明我的观点,请考虑以下问题:您将如何实例化 StyleSheetA?无论如何,可能使用接受所有这些参数的构造函数。这种设计可能给您带来的唯一好处是,如果您有一组由 StyleSheetA 对象封装的相同参数值,您将在 A 的多个实例中重复使用这些参数值。如果是这样,请记住,虽然您有不同的 A 实例,但它们会共享相同的参数,因此这不是一个好的选择。

我可以建议您尝试重构类 A 本身。试着把它分成更小的类(class)。如果需要,尝试创建子类以避免条件分支等。

现在,我不知道你的类 A 是什么样子,但如果你这样做,你可能会有几个类,每个类都有自己的一组参数。如果任何参数是鉴别器(意味着它确定类“类型”),您将能够摆脱它,只需使用子类,并依靠内置类型系统来代替它。

关于java - 构造函数的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4950648/

相关文章:

java - 在java中将字符串转换为日期(复杂字符串)

java - 将 Java 类构造函数添加到 ArrayList(扩展)

design-patterns - 解释器模式示例

design-patterns - 模式 - 始终由同一方发起的通信

c# - 通过应用设计模式进行代码重构

javascript - 试图模拟 'new' 运算符

struct - 如何在 Julia 中为可变结构设置默认参数?

java - 在特定目录中查找文件名并将其存储在数组列表中的代码

java - 使用 Selenium 在 Chrome 浏览器中保存文档

java - Java 中的二重积分和期望值蒙特卡洛方法