单例模式

单例模式就是指,采取一定方法,在整个软件系统中,对某一个类只创建一个对象实例,并只提供一个公共方法来取得这个对象实例

 

饿汉式

1.构造器私有化----->防止在类外创建对象,确保只创建一个对象

2.在类中创建一个static对象,并用static方法来返回这个对象(因为如果不用static方法的话,在类的外面就要创建对象来调用这个方法,这不符合我们的"一个对象"原则,而又因为静态方法只能使用静态成员,所以这个唯一的实例对象也只能是static)

 

之所以叫饿汉式,是因为你不管用没用这个类的对象,他都先帮你创建出来了,饿汉就像一辈子没吃过饭一样,在这里就像一辈子没创建过对象一样,饿汉还没开饭就冲去吃饭,还没遇到需要对象的时候就帮你创建对象。

 

懒汉式

1.构造器私有化

2.创建一个static对象引用

3.建立一个static方法,这个方法将判断static对象引用是否为空,为空就判断这个类还没有创建对象,然后将创建一个新对象,并把地址赋给对象引用,然后返回对象引用

 

饿汉式VS懒汉式

1.饿汉式是类加载时就创建了对象,懒汉式是要使用的时候才创建对象

 

2.饿汉式不存在线程安全问题,懒汉式存在线程安全问题,比如当一个线程执行了懒汉式的static方法,判断出了static对象引用为空,然后开始创建对象,而还没等对象创建完成,地址还没来得及赋给static对象引用时,又有一个线程过来判断,那它也会判断出对象引用为空的结论,这样优惠开始创建一个对象,那就相当于建立了两个对象,这将破坏了单例模式,程序出现问题

 

3.饿汉式有可能会浪费资源,因为不一定会调用事先被创建好的对象,懒汉式则不会

ps:在javaSE标准类中,java.lang.RunTime就是经典的单例模式

posted @ 2022-03-08 07:36  codemelo  阅读(46)  评论(0)    收藏  举报