Java 对于单例类,我们仍然可以创建单独的实例吗?

Java 对于单例类,我们仍然可以创建单独的实例吗?,java,oop,singleton,Java,Oop,Singleton,例如,如果单例为: class Singleton { private static Singleton single_instance = null; public String s; public Singleton(String test) { s = "Hello I am a string part of Singleton class"; } public stati

例如,如果单例为:

class Singleton 
{ 
    private static Singleton single_instance = null; 
  
    public String s; 
  
    public Singleton(String test) 
    { 
        s = "Hello I am a string part of Singleton class"; 
    } 
  
    public static Singleton getInstance() 
    { 
        if (single_instance == null) 
            single_instance = new Singleton("valueA"); 
  
        return single_instance; 
    } 
} 
可以做以下事情吗

如果类是从一个地方调用的,比如类A,我们使用这个singleton,singleton.getInstance; 如果在所有其他位置调用该类,则创建一个新实例:Singleton Singleton=new Singleton;
如果情况很简单,所有类A都应该使用一个单例实例,而所有其他类都应该使用另一个单例实例,那么不,可能不是。更好的解决方案可能是工厂:

公共类伪单身{ ... } 公共类伪单音工厂{ 私有静态伪单例泛型=新的伪单例; 公共静态伪单例创建类调用者{ 如果调用方==A.class{ 返回新的伪单态; 否则{ 返回泛型; } } }
然而,这是非常丑陋的,我强烈建议重新设计它。它有可能会在未来产生大量的技术债务。

如果情况很简单,所有a类都应该使用一个单例实例,而所有其他类都应该使用另一个单例实例,那么不,可能不是。更好的解决方案可能是工厂:

公共类伪单身{ ... } 公共类伪单音工厂{ 私有静态伪单例泛型=新的伪单例; 公共静态伪单例创建类调用者{ 如果调用方==A.class{ 返回新的伪单态; 否则{ 返回泛型; } } }
然而,这是非常难看的,我强烈建议重新设计。它有可能在未来产生大量的技术债务。

我会说是的,你可以这样做。Singleton只是一个设计模式的名称,它向你展示了如何以特定的方式实现某些东西,从而从中获得一些好处

如果您的需求不符合单例模式,那么您当然可以实现其他东西,但它不再被称为单例模式


如果我正确理解了您的需求,也许您可以称之为Twoton:

我会说是的,您可以这样做。Singleton只是一个设计模式的名称,它向您展示了如何以特定的方式实现某些东西,从而从中获得一些好处

如果您的需求不符合单例模式,那么您当然可以实现其他东西,但它不再被称为单例模式


如果我正确理解了您的需求,也许您可以称之为Twoton:

Singleton是一种特定的模式,其中一个关键思想是您不允许其他类创建您的类的实例

如果您使构造函数可以公开访问,那么您就不再遵循单例模式,您应该将其称为其他类型,以避免混淆团队中的其他人

你可以称之为共享实例

可以做以下事情吗


只要它以后不会引起问题,就可以了。如果不知道问题的具体情况,很难说得更多。

Singleton是一种特定的模式,其关键思想是不让其他类创建类的实例

如果您使构造函数可以公开访问,那么您就不再遵循单例模式,您应该将其称为其他类型,以避免混淆团队中的其他人

你可以称之为共享实例

可以做以下事情吗

只要以后不会引起问题,就可以了。如果不知道问题的具体情况,很难说得更多。

要回答您的问题: 这是不正确的。因为它违反了单例模式,允许多个实例。 构造函数必须是私有的

如前所述,您应该重构代码以避免使用singleton,因为它有一些缺点,例如缺乏测试。 现在回答你的问题更像是一种反模式

: 这是不正确的。因为它违反了单例模式,允许多个实例。 构造函数必须是私有的

如前所述,您应该重构代码以避免使用singleton,因为它有一些缺点,例如缺乏测试。
现在它更多的是一种反模式

而不是单例。听起来你希望在类a中有一个singleton类型的静态字段。对于某些代码,如果我们删除这行:如果single_instance==null.,那么这就不再是单例,代码也没用了,因为我们可以在任何地方调用新的SingletonvalueA。对吗?这不是单例n、 听起来您希望在类a中有一个singleton类型的静态字段。对于某些代码,如果我们删除这一行:if single_instance==null.,那么这就不再是singleton了,代码也没用了,因为我们可以在任何地方调用新的SingletonvalueA。对吗?