具有动态变量的单身人士

时间:2015-12-22 10:33:54

标签: java

我需要调用函数来重新计算来自程序{不同类}的不同位置的参数。我需要用不同的系数重新计算,这可以在运行时间内改变。 简单示例:new_value = old_value * coefficient。

目前,我有一个持有这些系数的课程,并且有重新计算的方法。缺点:我需要将该类实例传递给我想要使用它的每个地方。

这是我的单身人士:

public class Converter {
    private double              lbU_2_U;
    private static Converter    instance    = new Converter();

    public Converter() {
        lbU_2_U = 1;
    }

    public static Converter getInstance() {
        return instance;
    }

    public void updateVelocityCoeficient(double lb_2_p) {
        lbU_2_U = lb_2_p;
    }

    public double velToP(double lbU) {
        return lbU_2_U * lbU;
    }

    public double velToLB(double u) {
        return u / lbU_2_U;
    }
}

所以,现在的优点是,我可以编写程序中的任何地方

newVelocity = Converter.getInstance().velToP(velocity)

前进,我会做这样的事情:

newVelocity = Converter.velToP(velocity)

所以我在考虑将我的Singleton改为:

public class Converter {
    private double              lbU_2_U;
    private static Converter    instance    = new Converter();

    public Converter() {
        lbU_2_U = 1;
    }

    public static Converter getInstance() {
        return instance;
    }

    public static void updateVelocityCoeficient(double lb_2_p) {
        instance.lbU_2_U = lb_2_p;
    }

    public static double velToP(double lbU) {
        return instance.lbU_2_U * lbU;
    }

    public static double velToLB(double u) {
        return u / instance.lbU_2_U;
    }
}
你怎么了? 如果我可以在multipleThread应用程序中使用它,并且这是使用Singleton的正确方法,我不确定这是否有效。

谢谢

3 个答案:

答案 0 :(得分:2)

这不是使用Singleton模式的好方法。

查看以下答案:When should the Singleton pattern NOT be used?

答案 1 :(得分:1)

那很好。但是:

- 您的构造函数应该是私有的才能成为Singleton。 (您是唯一能够创建实例的人)

private Converter() {
    lbU_2_U = 1;
}

- 我不相信你需要使用单身人士。你只需要一个

private static double lbU_2_U;

答案 2 :(得分:1)

您不需要这是Singleton - 您只需要一些static方法。

public class Converter {

    private static double lbU_2_U = 1;

    private Converter() {
        // No non-static methods so disallow construction.
    }

    public static void updateVelocityCoeficient(double lb_2_p) {
        lbU_2_U = lb_2_p;
    }

    public static double velToP(double lbU) {
        return lbU_2_U * lbU;
    }

    public static double velToLB(double u) {
        return u / lbU_2_U;
    }
}

我不会在这里讨论你是否在这里使用好的或坏的模式。