单例类如何使用接口?

AJ.*_*AJ. 10 java singleton class-design interface

我在许多地方读到单身人士可以使用接口.有些我怎么也无法理解这一点.

nkr*_*1pt 22

每个类都可以实现一个接口,而Singleton只是一个"普通"类,它确保在它可能实现的其他业务逻辑之外的任何时间点只存在一个实例.这也意味着一个单身人士至少有2个责任,这不是好的OO设计,因为班级应该只有1个责任并确保他们擅长这个责任,但这是另一个讨论.

  • @ChristianVielma :(是的,迟到的)问题是它创建*全局状态*,就像*全局变量*一样,并且遇到类似的问题.例如,在没有外部知识的情况下测试内部请求单例的类是很困难的.您的生产数据库充满了垃圾/测试数据?检查单身人士.寻找一个bug?如果你有单身,因此有全球状态,你不能只关注有限的范围; 你必须记住代码库.谢谢单身人士.请注意,这是关于singleton*pattern*,而不是singleton*objects*.常用并不意味着它必须"好". (2认同)

Nic*_*olt 11

就像是:

public interface MyInterface 
{
}
Run Code Online (Sandbox Code Playgroud)

public class MySingleton implements MyInterface
{
  private static MyInterface instance = new MySingleton();

  private MySingleton() 
  {
  } 

  public static MyInterface getInstance()
  {
    return instance;
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,Java实现Singleton的最佳方法是使用单元素枚举.它比公共字段方法更简洁,它提供免费的序列化机制,并且还提供针对反射攻击的安全性.这种方法尚未被广泛采用,但可能有趣的是要知道.有关更多信息,请参阅Joshua Bloch撰写的"Effective Java"中的相关项目. (7认同)

Cha*_*olu 5

我想我理解你的问题.您想在接口中定义工厂方法(静态方法到getInstance()).但由于工厂方法无法在接口中定义,因此该逻辑不起作用.

一种选择是拥有一个包含静态方法的工厂类.所以第一类将有三个类来保持静态方法第二个是接口第三个是具体类

但我们不能将具体的构造函数设为私有.

但是,如果您的基础架构有两个包,一个用于公共,另一个用于私有

在public中定义接口,使具体的类包级别(没有任何访问修饰符)和Factory类和静态方法是公共的.

我希望这可以帮到你.