有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java单例类不起作用

我已经经历了this tutorial,据我所知,单例类只能初始化一次。因此,我编写了以下1行代码:

public synchronized static DefaultHttpClient getThreadSafeClient {

   **System.out.println("this should only happen once!!");**

然后,我在MainActivity的按钮中编写了以下代码行:

HttpClient httpclient = multithreaded_httpclient.getThreadSafeClient();
HttpClient httpclient1 = multithreaded_httpclient.getThreadSafeClient();

然后我多次按下该按钮,令我惊讶的是,我在日志中发现了以下内容:

这应该只发生一次 这应该只发生一次 这应该只发生一次 这应该只发生一次

我认为singleton classe的方法只执行一次。。。这怎么可能


共 (2) 个答案

  1. # 1 楼答案

    似乎有一个关于Singletons的小误解

    Singleton只能初始化一次,这意味着它只能有一个实例。当然,每次调用静态方法时都会执行它,但返回的实例始终是同一个实例

  2. # 2 楼答案

    简而言之,单例模式意味着:

    • 类的构造函数是私有的
    • 您可以创建一个公共工厂方法,在其中处理:
      • 如果是第一次请求实例,请使用new YourClass()创建一个实例
      • 如果在上一次调用中已创建实例,则不创建新实例,而是返回上一个实例

    因此,当任何其他类需要该类的实例时,它们被强制调用该工厂方法,因为构造函数是私有的,并且在该方法内部,您编写代码以确保只有一个实例

    就这些。使用此方法只能创建一个对象,因此该对象的所有可能实例实际上都是相同的,但当然,对该对象的任何公共方法的任何调用都将正常执行,无论调用多少次