单例模式(饥汉式、懒汉式)
文章目录
- 一、简单的单例模式要点
- 二、实现步骤(详细)
- 1、创建一个简单的构造函数
- 2、构造函数私有化
- 小结
- 3、通过一个公有的方法提供访问
- 小结
- 4、创建一个成员变量
- 小结
- 5、简单单例函数优化(赖汉式)
- 6、简单单例函数(饥汉式)
- 三、总结
一、简单的单例模式要点
1、某个只能有一个对象
2、必须自行创建这个实例
3、必须向整个系统提供这个实例
二、实现步骤(详细)
1、创建一个简单的构造函数
代码如下(创建一个构造函数):
public class SingleInstance {public SingleInstance() {System.out.println("我是一个构造函数");}}
代码如下(测试):
public class Test01 {public static void main(String[] args) {SingleInstance singleInstance1 = new SingleInstance();}}
代码如下(运行结果):
我是一个构造函数片
2、构造函数私有化
代码如下(改变构造函数的修饰词):
public class SingleInstance {private SingleInstance() {System.out.println("我是一个构造函数");}}
代码如下(测试是报错的):
public class Test01 {public static void main(String[] args) {SingleInstance singleInstance1 = new SingleInstance();}}
小结
由private修饰的构造函数在测试中是不能初始化的,所以只能再想办法
3、通过一个公有的方法提供访问
public class SingleInstance {private SingleInstance() {System.out.println("我是一个构造函数");}public static SingleInstance getSingleInstance() {return singleInstance;}
}
小结
由于构造函数是由private修饰的所以只能采取提供方法来访问,目前优先想到的是由static一起修饰的方法,访问格式是:类名.方法名 但是static修饰有自己的局限性,所以想要达到预期效果同步效果,成员变量也得是static来修饰,否则方法加载成功但是成员变量还没有加载,就会出现报错。
4、创建一个成员变量
public class SingleInstance {private static SingleInstance singleInstance=new SingleInstance();private SingleInstance() {System.out.println("我是一个构造函数");}public static SingleInstance getSingleInstance() {return singleInstance;}
}
代码如下(测试):
public class Test01 {public static void main(String[] args) {SingleInstance singleInstance = SingleInstance.getSingleInstance();System.out.println(singleInstance);SingleInstance singleInstance1 = SingleInstance.getSingleInstance();System.out.println(singleInstance1);}}
小结
我们总算得到了自己想要看到的结果,但是还是有不足那就是static修饰的通病就是如果加载进去用不到那就是占资源,所以为了解决这一毛病,我们可以在成员变量直接将初始化赋予null ,在提供访问的方法这里进行一个判断如果需要访问了就会进行判断,开始进行初始化,不需要则就不初始化,占资源的问题就迎刃而解了!!!
5、简单单例函数优化(赖汉式)
代码如下(优化):
public class SingleInstance {private static SingleInstance singleInstance=null;private SingleInstance() {System.out.println("我是一个构造函数");}public static SingleInstance getSingleInstance() {if(singleInstance == null) {singleInstance = new SingleInstance();}return singleInstance;}
}
代码如下(测试):
public class Test01 {public static void main(String[] args) {SingleInstance singleInstance1 = SingleInstance.getSingleInstance();System.out.println(singleInstance1);SingleInstance singleInstance2 = SingleInstance.getSingleInstance();System.out.println(singleInstance2);SingleInstance singleInstance3 = SingleInstance.getSingleInstance();System.out.println(singleInstance3);}}
代码如下(测试结果):
我是一个构造函数
com.etime03.SingleInstance@70dea4e
com.etime03.SingleInstance@70dea4e
com.etime03.SingleInstance@70dea4e
6、简单单例函数(饥汉式)
其实就是在懒汉式的成员变量哪里改了一下再加一个final修饰,判断不需要了,其他的都一样的。
public class SingleInstance {private static final SingleInstance singleInstance=new SingleInstance();private SingleInstance() {System.out.println("我是一个构造函数");}public static SingleInstance getSingleInstance() {return singleInstance;}
}
三、总结
其实每一行代码都有它的作用,每一个属性都有它存在的意义,就像人生上的细胞,虽然微小,但是它是构成你一个整体的一部分,所以代码虽少但是理解为上,每个东西都不会平白无故的出现,也不会平白无故的消失,就由我上面的代码那个SingleInstance是由static修饰的一样,其实它可以不用static修饰的,但是下面提供访问函数就会报错,因为没有一起加载进来,所以就会报找不到的错误,那你可能会问那访问方式不用static修饰不就好了,那你就片面了,private修饰私有化就没有意义了,一切回到起点,你的属性安全就没有保障,成为任人宰割的羔羊,就可以随意改你的东西,单列模式就没有任何实现的可能,所以,都是一环扣一环的,在学Java这条路上任重而道远啊!刚学到继承,大佬勿喷。
单例模式(饥汉式、懒汉式)相关推荐
- java 单例模式 ---饿汉式懒汉式
目录 单例设计模式 饿汉式 懒汉式 饿汉式vs懒汉式 结语 单例设计模式 所谓单例设计模式,就是采取一定的方法在整个软件系统中,对某个类只能存在一个对象实例 1.单例类只能有一个实例. 2.单例类必须 ...
- 单例模式饿汉式/懒汉式的区别
単例设计模式(Singleton Pattern): 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法. 如果我们要 ...
- Singleton模式(单例模式) 饿汉式和懒汉式
目的:整个应用中有且只有一个实例,所有指向该类型实例的引用都指向这个实例. 好比一个国家就只有一个皇帝(XXX),此时每个人叫的"皇帝"都是指叫的XXX本人; 常见单例模式类型: ...
- 单例模式——饿汉式和懒汉式
单例模式:一个类只允许存在唯一的对象,并提供它的访问方式 创建思路: 1.禁止在类的外部创建对象:私有化构造函数 2.在类的内部提供唯一的对象:静态成员变量 3.提供访问唯一对象的方法:静态成员函数 ...
- Java-Day12 面向对象的三大特征之封装、继承,单例模式(饿汉式、懒汉式)、方法重写 (覆盖)、注解 (annotation)、super关键字、对象的创建流程超详细
目录 1. 面向对象的三大特征之封装 1.1 封装的含义 1.2 封装的目的 1.3 封装的优点 1.4 封装的实现过程 1.5 拓展知识:JavaBean 2. 面向对象的三大特征之继承 2.1 继 ...
- 单例模式饿汉式与懒汉式详解
单例模式饿汉式与懒汉式详解 步骤: 私有构造方法,使得在类的外部不能调用此方法,限制产生多个对象 类初始化时,区分饿汉式与懒汉式的区别 对外部提供调用方法,将创建的对象返回,只能通过类来调用 饿汉式: ...
- Java中单例模式—饿汉式和懒汉式
所谓单例模式就是为了确保类在内存中只有一个对象,之所以会出现单例模式是因为,单例模式在系统内存中只存在一个对象,可以节约资源 目录 一.饿汉式 二.懒汉式 一.饿汉式 该方式在开发中是经常用的,因为这 ...
- 【学习笔记】【C++整理A】【总】单例模式-饿汉式、懒汉式;
文章目录 一.语言分类: 三.基础A:- 函数重载.默认参数.extern "C".重复包含 1.函数重载 2.默认参数 3.extern "C" 4.防止重复 ...
- Java中单例模式----饿汉式(HungrySingLeton)和懒汉式(LazySingLeton)
一. 单例模式概述 单例模式(Singleton),也叫单子模式,是一种常用的设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在.许多时候,整个系统只需要拥有一个的全局对象,这样有利于我 ...
最新文章
- 《C Primer Plus(第6版)中文版》一第1章 初识C语言1.1 C语言的起源
- 一次完整的渗透测试仅供学习研究
- Juniper防火墙命令行查错工具snoop的使用
- webpack学习(七)打包压缩图片
- 程序员的创业困境 谁来帮助出出主意?
- 如何自动导出内存映像文件?
- vscode如何查看修改过的部分_编辑器 VS Code 如何快速查看 Go 接口?
- 高甜预警|甜齁你的情人节促销海报设计模板
- python槽怎么用_【Python成长之路】从零学GUI -- 多窗口跳转(信号与槽函数用法)...
- LeetCode 230. Kth Smallest Element in a BST
- 【CF 670C】Cinema
- 局部变量AND全局变量
- oracle 10g 各版本下载地址
- XRD测试常见问题及解答(三)
- Wake On Lan 网络唤醒 远程开机功能设置教程
- 华硕双屏笔记本windows系统驱动安装
- 那一年,我们二十七八岁
- 如何实现上传多个图片并依次展示_在一张PowerPoint中插入多张图片如何让这些图片能依次播放...
- MySQL数据库开发规范
- 30岁之前一定要知道的7个金融概念-千氪
热门文章
- Error occured processing XML 'Cannot find class [springmvc.extention.BeanArgumentResolver]'.
- 一文通俗搞懂线性无关特征向量个数≤特征值重数
- cufflinks 绘图
- RTFM(Read The Fucking Manual)的意思
- 循序渐进理解RTFM算法
- RTFM:Weakly-supervised Video Anomaly Detection with Robust Temporal Feature【ICCV 2021】附代码注释
- Python缓存cacheout的使用
- Python调用Jar包的两种方式
- 小学生python游戏编程arcade----爆炸粒子类
- mysql隔离级别到底是什么