【问题标题】:How can a singleton class use an interface?单例类如何使用接口?
【发布时间】:2009-09-30 09:23:25
【问题描述】:

我在很多地方读到过单身人士可以使用接口。有些我无法理解。

【问题讨论】:

    标签: java interface singleton class-design


    【解决方案1】:

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

    【讨论】:

    • 为什么单例不是好的 OO 设计?实际上是最常见的OO设计模式之一
    • @ChristianVielma:(是的,迟到了)问题是它创建了全局状态,就像全局变量一样,并且遇到了类似的问题。例如,很难在没有外部知识的情况下测试内部请求单例的类。您的生产数据库中充满了垃圾/测试数据?检查单例。寻找错误?如果你有单例,因此有全局状态,你不能只关注有限的范围;您必须牢记代码库。感谢单身人士。请注意,这是关于单例 pattern,而不是单例 objects。常用不代表一定“好”。
    【解决方案2】:

    类似:

    public interface MyInterface 
    {
    }
    

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

    【讨论】:

    • 仅供参考,Java 中实现 Singleton 的最佳方式是使用单元素枚举。它比公共字段方法更简洁,它免费提供序列化机制,还提供了针对反射攻击的安全性。这种方法尚未被广泛采用,但知道它可能很有趣。有关更多信息,请参阅 Joshua Bloch 的“Effective Java”中有关它的项目。
    • @Andrew:谢谢,我在 SO 和日常工作之间跳来跳去,不小心错过了 :-)
    • @nkr1pt:我通常会尽量避免使用单例,但使用枚举是个好主意,感谢您的指点。
    • @nkr1pt 我从未想过这种技术。这真的很强大,但非常简单。它还极大地简化了引用并使其非常直观
    【解决方案3】:

    我想我理解你的问题。您想在接口中定义工厂方法(getInstance() 的静态方法)。但是由于接口中不能定义工厂方法,所以这个逻辑是行不通的。

    一种选择是拥有一个包含该静态方法的工厂类。所以会有三个班 第一类持有静态方法 二是界面 第三是具体类

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

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

    公开定义接口,使具体的类包级别(没有任何访问修饰符)和工厂类和静态方法是公开的。

    希望对你有帮助。

    【讨论】:

      【解决方案4】:

      一个单例有一个实例——它永远不会有多个实例。您可能会使用几个静态成员来获取引用并确保它永远不会获取多个实例,但在大多数情况下,该类与任何其他类相同。

      【讨论】:

        【解决方案5】:

        基本上,单例类是一个只能被实例化一次的类。 单例类模式是通过使用静态方法获取单例类的实例并限制对其构造函数的访问来实现的。

        就接口的使用而言,它类似于任何其他类实现接口的方式。

        而且它也不应该允许克隆该对象。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-12
          • 2012-05-17
          • 1970-01-01
          • 1970-01-01
          • 2019-04-17
          • 1970-01-01
          • 2019-06-30
          相关资源
          最近更新 更多