Java 带动态变量的单态

Java 带动态变量的单态,java,Java,我需要调用函数来重新计算程序{不同类}不同位置的参数。我需要重新计算不同的系数,可以改变运行时间。 简单示例:新值=旧值*系数 目前,我有一个类保存这些系数,有一些方法正在进行重新计算。缺点:我需要将该类的实例传递到我想要使用它的每个地方 这是我的单身汉: public class Converter { private double lbU_2_U; private static Converter instance = new Conve

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

目前,我有一个类保存这些系数,有一些方法正在进行重新计算。缺点:我需要将该类的实例传递到我想要使用它的每个地方

这是我的单身汉:

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)
所以我想把我的单身汉改成这样:

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的正确方法

谢谢

太好了。但是:

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

-我认为你不需要使用单身汉。你只需要一个

private static double lbU_2_U;

这不是使用单例模式的好方案


看看这些答案:

你不需要把它变成一个
单身汉
——你只需要一些
静态
方法

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;
    }
}

我不会在这里讨论您使用的是好模式还是坏模式。

这些标识符(变量/方法名称)都很神秘。请使用更具描述性的标识符Singleton是一个概念,而不是一个正式的规范。更好的方法是理解概念。请看:@elif他有编程问题(无法实现动态特性),因此我认为CodeReviews不适合使用状态单例是个坏主意。看,这不是真正的单身;我建议您将构造函数设置为私有。1)是的,构造函数将是私有的,快速编写2)好吧,我需要在运行程序时更改lbU_2_P系数。您可以在运行时更改静态属性。“公共无效设置(双d)”
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;
    }
}