单身类不起作用

时间:2014-02-08 20:22:02

标签: java android

我一直在经历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();

然后我多次按下按钮,令我惊讶的是我在我的logcat中发现了这个:

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

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

2 个答案:

答案 0 :(得分:2)

似乎与Singletons有一点误会。

单身人士只能初始化一次,这意味着只能有一个实例。当然,静态方法将在每次调用时执行,但返回的实例将始终是完全相同的。

答案 1 :(得分:1)

简而言之,单身人士模式意味着:

  • 您班级的构造函数是私有的
  • 您创建了一个公共工厂方法,您可以在其中处理:
    • 如果是第一次请求实例,请使用new YourClass()
    • 创建实例
    • 如果某个实例已在之前的通话中创建过,则您不会创建新实例,但会返回上一个实例。

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

多数民众赞成。有了这个,只能创建一个对象,所以对象的所有可能实例实际上是相同的,但当然,无论调用多少次,都会正常执行对该对象的任何公共方法的任何调用。