gpt4 book ai didi

Java:[全局方法访问]单实例枚举 vs 按需对象构造 vs 静态

转载 作者:行者123 更新时间:2023-11-30 03:51:11 28 4
gpt4 key购买 nike

我想创建一个具有很少方法的类,可以在包内的任何地方使用。在读到它自动提供安全实例化、序列化和防止在枚举外部实例化的保护后,我选择将枚举与单个实例一起使用。我相信这是创建单例最简单、最安全的方法。但我的上司回来说这是肮脏的编程。是不是真的?有谁知道使用枚举而不是对象构造并使用类传递引用的缺点?枚举何时初始化?

public enum Myenum {
INSTANCE;

public void init(...) {..initialize local variables...}

public method1 (...) {...}
public method2 (...) {...}
}

对比

public class Myclass {
public Myclass(...) {...initialize local variables...}

public method1 (...) {...}
public method2 (...) {...}
}

对比

public class Myclass {
public static void init(...) {...initialize local variables...}

public static method1 (...) {...}
public static method2 (...) {...}
}

在我看来,使用第二种方法的缺点是在对象构造时需要使用方法和同步问题的任何地方都需要 Myclass 的对象引用。在我的例子中,我并没有真正使用枚举的序列化优势。

枚举是否隐式提供依赖注入(inject)的好处? (即可以在包内的任何地方访问Myenum的method1、method2,而无需担心实例创建)

我需要的枚举的另一个功能是枚举内部的方法不能在其外部被覆盖。

我在这里忽略了一些明显的缺点吗?

最佳答案

enum 向其他程序员发出语义信号,表明它是一种具有一系列可能值的类型,您可以对其进行检查,例如在 switch 语句中。然而,有a number of compelling reasons为什么枚举可以被视为比人们通常在 Java 中使用的大多数其他模式更好的单例模式实现。

如果您确定要使用单例模式,那么使用 enum 可能就可以了。然而,有些模式往往更灵活、可进行单元测试、更可靠等。如果有一天您决定实际上不再希望它成为单例怎么办?如果您希望在数据库中进行某些更改时它可以刷新怎么办?使用任何单例模式都会将您锁定在单例表示中,并使将来更难进行此类更改。

工厂模式比单例更灵活,但在我看来,最好的模式是使用依赖注入(inject)。您可以单例绑定(bind)您的类型以避免重新实例化它的成本,但类型本身(及其使用者)不需要绑定(bind)到特定的生命周期或模式。

关于Java:[全局方法访问]单实例枚举 vs 按需对象构造 vs 静态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24416784/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com