今天我们学习了23种设计思路中的单例,这个主要是要让我们的类成为一个单例的,
也就是只能有一个对象,只能创建出来一个对象,也就是new关键字只能出现一次,
因为new的意思就是创建,只有他创建一次就能保证他是唯一的,而且不能我们程
序员自己创建,只能让程序来创建,单例有两种模式,我们先说饿汉模式,饿汉模式
是先要把本类的构造方法设置成private,因为只有隐藏掉了以后,才能保证在别的类
不能创建对象,然后我们要在本类写一个静态属性把本类给new出来,以student为例
peivate static Student stu=new Student();这么写的主要原因是因为出了这个类就
不能创建了,所以我们在这里给他创建出来,但是只有这个是不行的,因为这个对象
现在在本类中,我们必须要把它给扔出来,因为要让别的类用,所以我们要进行下一
步的操作,就是写一个公共的静态方法在这个方法里把上面创建的对象给return出去
这样就能保证他只创建了一个对象,而且把这个对象给扔了出去,因为它定义属性是
定义的静态的,所以类一执行对象立马创建了,因为创建的快,所以又称为饿汉式模
式,这种方式因为他构造方法是私有的并且他在自己的类里创建的对象,所以他的对
象是唯一的,还有就是他的线程是安全的。这就是饿汉式;以下是实例
也就是只能有一个对象,只能创建出来一个对象,也就是new关键字只能出现一次,
因为new的意思就是创建,只有他创建一次就能保证他是唯一的,而且不能我们程
序员自己创建,只能让程序来创建,单例有两种模式,我们先说饿汉模式,饿汉模式
是先要把本类的构造方法设置成private,因为只有隐藏掉了以后,才能保证在别的类
不能创建对象,然后我们要在本类写一个静态属性把本类给new出来,以student为例
peivate static Student stu=new Student();这么写的主要原因是因为出了这个类就
不能创建了,所以我们在这里给他创建出来,但是只有这个是不行的,因为这个对象
现在在本类中,我们必须要把它给扔出来,因为要让别的类用,所以我们要进行下一
步的操作,就是写一个公共的静态方法在这个方法里把上面创建的对象给return出去
这样就能保证他只创建了一个对象,而且把这个对象给扔了出去,因为它定义属性是
定义的静态的,所以类一执行对象立马创建了,因为创建的快,所以又称为饿汉式模
式,这种方式因为他构造方法是私有的并且他在自己的类里创建的对象,所以他的对
象是唯一的,还有就是他的线程是安全的。这就是饿汉式;以下是实例
还有一种懒汉式,它跟
懒汉式不一样的是,它定义属性的时候只有定义没有创建,它在下面的方法里先判断
一下它不是null为了避免它再次调用的时候重复创建,如果不是null才创建,但是因
为懒汉式是线程不安全的,所以我们可以在方法上添加一个锁,但是如果在方法上加
会把整个方法给包住,实在是没有必要,所以我们只需要在某一段代码上加上锁即可,
但是因为线程是并发的,比如一个对象通过了if判断进入了锁里面,但是他还没有创建
对象它的时间到了,这时另一个对象通过了if方法,进入了锁里面,这样就会导致好几
个线程同时进入了对象里,解决办法就是在锁的里面再加一个if判断,判断它是否为
null这样就算第一个进来了,第二因为通过不了锁,所以只能等第一个出来,这样
就实现了线程安全,以下是实例
懒汉式不一样的是,它定义属性的时候只有定义没有创建,它在下面的方法里先判断
一下它不是null为了避免它再次调用的时候重复创建,如果不是null才创建,但是因
为懒汉式是线程不安全的,所以我们可以在方法上添加一个锁,但是如果在方法上加
会把整个方法给包住,实在是没有必要,所以我们只需要在某一段代码上加上锁即可,
但是因为线程是并发的,比如一个对象通过了if判断进入了锁里面,但是他还没有创建
对象它的时间到了,这时另一个对象通过了if方法,进入了锁里面,这样就会导致好几
个线程同时进入了对象里,解决办法就是在锁的里面再加一个if判断,判断它是否为
null这样就算第一个进来了,第二因为通过不了锁,所以只能等第一个出来,这样
就实现了线程安全,以下是实例