1.静态变量式(较推荐)
/**
单例模式-静态变量
*/
public class Sington1 {
private Sington1()
{ }
public static Sington1 sington1=new Sington1();
public static Sington1 getInstance()
{
return sington1;
}
}
2.线程不安全式
当同时有两个场景需要单例对象时,会同时进入getInstance()
方法中,线程不安全
public class Sington2 {
private Sington2()
{}
public static Sington2 sington2;
public static Sington2 getInstance()
{
if(sington2==null)
{
sington2=new Sington2();
}
return sington2;
}
}
3.线程安全式,但是效率不高
public class Sington3 {
private Sington3()
{
}
public static Sington3 sington3;
public static synchronized Sington3 getInstance()
{
if(sington3==null)
{
sington3=new Sington3();
}
return sington3;
}
}
4.线程安全式,效率也不错(较推荐)
双加锁
public class Sington4 {
private Sington4()
{
}
public static Sington4 sington4;
public static Sington4 getInstance()
{
if(sington4==null)
{
synchronized(Sington4.class)
{
sington4=new Sington4();
}
}
return sington4;
}
}
5.静态内部类式
public class Sington5 {
private static class SingletonHolder {
private static final Sington5 INSTANCE = new Sington5();
}
private Sington5() {
}
public static final Sington5 getInstance() {
return SingletonHolder.INSTANCE;
}
}
6.枚举式(较推荐)
public enum Sington6 {
INSTANCE;
private Dog instance;
Sington6() {
instance = new Dog();
}
public Dog getInstance() {
return instance;
}
public static void main(String[] args) {
System.out.println(Sington6.INSTANCE.getInstance());
}
}