本文主要是介绍[Java基础揉碎]单例模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
什么是设计模式
什么是单例模式
饿汉式与懒汉式
饿汉式vs懒汉式
懒汉式存在线程安全问题
什么是设计模式
1.静态方法和属性的经典使用
2.设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、 以及解决问题的思考方式。设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己再思考和摸索
什么是单例模式
1.所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法
2.单例模式有两种方式:
1)饿汉式
2)懒汉式
饿汉式与懒汉式
具体步骤:
1)构造器私有化
2)类的内部创建对象
3)向外暴露一个静态的公共方法。getlnstance
4) 代码实现 class
*** 饿汉式实现代码:
// 为了能够在静态方法中返回instance, 所以属性必须要static修饰
// 之所以叫饿汉式是因为一旦这个类被加载对象就创建出来了
*** 懒汉式实现代码:
// 懒汉式就是在属性不直接new对象, 在静态方法当中判断为null时再去创建对象, 这样在这个类信息被加载的时候不会立马创建对象, 而是在调用这个静态方法的时候被创建, 而且后续调用这个方法因为上一次调用已经创建了对象在null判断的条件下直接返回第一次创建的对象, 实现单例
饿汉式vs懒汉式
1.二者最主要的区别在于创建对象的时机不同:饿汉式是在类加载就创建了对象实例, 而懒汉式是在使用时才创建
2.饿汉式不存在线程安全问题,懒汉式存在线程安全问题
3.饿汉式存在浪费资源的可能。因为如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费了,懒汉式是使用时才创建,就不存在这个问题
4.在我们javaSE标准类中, java.lang.Runtime就是经典的单例模式
懒汉式存在线程安全问题
假设此时存在三个线程同时去掉getInstance方法, 同时都进入到了if判断, 当第一个进去还在new Cat的时候, 还在创建进行中没有创建好, 第二个线程进去了也在new Cat ,第三个同理, 此时就会创建多个对象, 单例模式就被破坏了, 所以说存在线程安全问题
这篇关于[Java基础揉碎]单例模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!