文章目录

  • 一、简单的单例模式要点
  • 二、实现步骤(详细)
    • 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这条路上任重而道远啊!刚学到继承,大佬勿喷。

单例模式(饥汉式、懒汉式)相关推荐

  1. java 单例模式 ---饿汉式懒汉式

    目录 单例设计模式 饿汉式 懒汉式 饿汉式vs懒汉式 结语 单例设计模式 所谓单例设计模式,就是采取一定的方法在整个软件系统中,对某个类只能存在一个对象实例 1.单例类只能有一个实例. 2.单例类必须 ...

  2. 单例模式饿汉式/懒汉式的区别

    単例设计模式(Singleton Pattern): 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法. 如果我们要 ...

  3. Singleton模式(单例模式) 饿汉式和懒汉式

    目的:整个应用中有且只有一个实例,所有指向该类型实例的引用都指向这个实例. 好比一个国家就只有一个皇帝(XXX),此时每个人叫的"皇帝"都是指叫的XXX本人; 常见单例模式类型: ...

  4. 单例模式——饿汉式和懒汉式

    单例模式:一个类只允许存在唯一的对象,并提供它的访问方式 创建思路: 1.禁止在类的外部创建对象:私有化构造函数 2.在类的内部提供唯一的对象:静态成员变量 3.提供访问唯一对象的方法:静态成员函数 ...

  5. Java-Day12 面向对象的三大特征之封装、继承,单例模式(饿汉式、懒汉式)、方法重写 (覆盖)、注解 (annotation)、super关键字、对象的创建流程超详细

    目录 1. 面向对象的三大特征之封装 1.1 封装的含义 1.2 封装的目的 1.3 封装的优点 1.4 封装的实现过程 1.5 拓展知识:JavaBean 2. 面向对象的三大特征之继承 2.1 继 ...

  6. 单例模式饿汉式与懒汉式详解

    单例模式饿汉式与懒汉式详解 步骤: 私有构造方法,使得在类的外部不能调用此方法,限制产生多个对象 类初始化时,区分饿汉式与懒汉式的区别 对外部提供调用方法,将创建的对象返回,只能通过类来调用 饿汉式: ...

  7. Java中单例模式—饿汉式和懒汉式

    所谓单例模式就是为了确保类在内存中只有一个对象,之所以会出现单例模式是因为,单例模式在系统内存中只存在一个对象,可以节约资源 目录 一.饿汉式 二.懒汉式 一.饿汉式 该方式在开发中是经常用的,因为这 ...

  8. 【学习笔记】【C++整理A】【总】单例模式-饿汉式、懒汉式;

    文章目录 一.语言分类: 三.基础A:- 函数重载.默认参数.extern "C".重复包含 1.函数重载 2.默认参数 3.extern "C" 4.防止重复 ...

  9. Java中单例模式----饿汉式(HungrySingLeton)和懒汉式(LazySingLeton)

    一. 单例模式概述 单例模式(Singleton),也叫单子模式,是一种常用的设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在.许多时候,整个系统只需要拥有一个的全局对象,这样有利于我 ...

最新文章

  1. 《C Primer Plus(第6版)中文版》一第1章 初识C语言1.1 C语言的起源
  2. 一次完整的渗透测试仅供学习研究
  3. Juniper防火墙命令行查错工具snoop的使用
  4. webpack学习(七)打包压缩图片
  5. 程序员的创业困境 谁来帮助出出主意?
  6. 如何自动导出内存映像文件?
  7. vscode如何查看修改过的部分_编辑器 VS Code 如何快速查看 Go 接口?
  8. 高甜预警|甜齁你的情人节促销海报设计模板
  9. python槽怎么用_【Python成长之路】从零学GUI -- 多窗口跳转(信号与槽函数用法)...
  10. LeetCode 230. Kth Smallest Element in a BST
  11. 【CF 670C】Cinema
  12. 局部变量AND全局变量
  13. oracle 10g 各版本下载地址
  14. XRD测试常见问题及解答(三)
  15. Wake On Lan 网络唤醒 远程开机功能设置教程
  16. 华硕双屏笔记本windows系统驱动安装
  17. 那一年,我们二十七八岁
  18. 如何实现上传多个图片并依次展示_在一张PowerPoint中插入多张图片如何让这些图片能依次播放...
  19. MySQL数据库开发规范
  20. 30岁之前一定要知道的7个金融概念-千氪

热门文章

  1. Error occured processing XML 'Cannot find class [springmvc.extention.BeanArgumentResolver]'.
  2. 一文通俗搞懂线性无关特征向量个数≤特征值重数
  3. cufflinks 绘图
  4. RTFM(Read The Fucking Manual)的意思
  5. 循序渐进理解RTFM算法
  6. RTFM:Weakly-supervised Video Anomaly Detection with Robust Temporal Feature【ICCV 2021】附代码注释
  7. Python缓存cacheout的使用
  8. Python调用Jar包的两种方式
  9. 小学生python游戏编程arcade----爆炸粒子类
  10. mysql隔离级别到底是什么