views:

617

answers:

4

I read at many places that singletons can use interfaces. Some how I am unable to comprehend this.

+8  A: 

Every class can implement an interface, and a Singleton is just a "normal" class that makes sure that only one instance of it exists at any point in time apart from the other business logic it may implement. This also means that a Singleton has at least 2 responsibities and this is not good OO design as classes should only have 1 responsibility and make sure they are good at that responisibility, but that is another discussion.

nkr1pt
A: 

A singleton has an instance - it just never has more than one instance. You probably use a couple of static members for reference-fetching and to ensure that it never gets multiple instances, but for the most part the class is the same as any other class.

Steve314
+2  A: 

Something like:

public interface MyInterface 
{
}

And

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

  private MySingleton() 
  {
  } 

  public static MyInterface getInstance()
  {
    return instance;
  }
}
Nick Holt
You need to add a private no-args constructor to that class to make it a singleton.
Andrew Duffy
FYI, the best way in Java to implement a Singleton is by using a single-element enum. It is more concise than the public field approach and it provides the serialization mechanism for free and it also provides security against reflection attacks. This method has yet to be widely adopted but it might be interesting to know.For more information see the item about it in "Effective Java" by Joshua Bloch.
nkr1pt
@Andrew: thanks, I was bouncing between SO and the day job and missed that by accident :-)
Nick Holt
@nkr1pt: I generally try to avoid singletons but using an enum is neat idea, thanks for the pointer.
Nick Holt
A: 

Basically, a singleton class is a class which can be instantiated one and only once. The singleton class pattern is implemented by using a static method to get the instance of the singleton class and restricting access to its constructor(s).

As with the usage of an interface, it would be similar to the way any other class would implement an interface.

And also it shouldnt allow cloning of that object.

Zaki