Java中单例模式的用法

走在人间正道上 2016/11/6/周日 19:18:28
class Single{
private static Single INSTANCE=new Single();
private Single(){}
public static Single getInstance(){
return INSTANCE;
}
}
public static Single getInstance()----Single这个位置一般都是int,char,等数据类型,
Single不是数据类型,为什么放在那里

0 0,只要是类,都可以成为返回值呀。不一定指的是基础数据类型(String,int,boolean)等
还有getInstance()是为了返回当前类的对象的,其他类只有获取该类的对象,才能操纵该类的方法。
单例模式有好多写法
** 第一种**:类似楼主的写法

     class Single{
            public static final Single INSTANCE=new Single();
            private Single(){}
    }

优点:简洁
缺点:
1.调用时候,不太清晰,因为java很少获取成员变量
2.当单例模式类需要参数的时候,无法使用

第二种

    class Single{
        private static Single INSTANCE;
        private int data;
        private Single(int data){
            this.data = data;
        }

        /**
        *初始化
        */
        public static Single init(int data){
                synchronized(Single.class){
                        if (INSTANCE != null){
                                    INSTANCE = new Single(data);
                        }
                }
        }

        /**
        *获取当前类的对象
        */
        public static Single getInstance(){
            if (INSTANCE == null){
                  throw new NullPointerException("not have been initialized");
            }
            else{
                  return INSTANCE;
            }
        }
    }

你陷入了一个误区,应该是从C带过来的,在C里面是使用寄存器返回值,所以返回值的类型必须是基础类型,boolen int float 这些,但是java 不同,
java的返回值可以是任意类型,除了基础类型之外,有集合,字符串等。这里返回的是一个single()类的一个 对象。
在单例模式中,私有化构造方法。目的是为了在类外面无法使用构造函数建立新的对象。,然后用static 定义一个single()类对象,保证了单例模式只能有一个对象的实现(不考虑克隆和反射的情况下)

你还是看下java的语法吧,private static Single INSTANCE=new Single();表示创建一个私有静态的名字叫INSTANCE的Single的一个类。private Single(){} 表示构造方法私有,就是不能通过new的方式创建,后面有一个getInstance()方法,返回的就是你开始创建那个类。