什么是单例设计模式

所谓单例设计模式,就是采取一定的方法保证整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。

目的:使用着在main方法中就不可以自己创建实例对象以及定义一些变量。

单例设计模式的两种方法:饿汉式,懒汉式

饿汉式

  1. 将我们的构造器私有化,防止我们在类的外部可以直接new一个对象
  2. 在类的内部直接创建该静态对象(否则下面的static方法无法调用)
  3. 提供一个公共的static方法,返回我们想要的对象
  4. 实现代码

疑问:

为什么getInsatnce方法要用静态static???

如果我们不使用静态方法,想要调用我们的方法时,就必须首先new一个实例对象,与我们的最初使用的目的相违背。

为什么叫饿汉式??

我们可能在以后的使用中不会使用到dog的名字,但是我们的类的内部已经给出了相应的属性元素。

查看以下一段代码:

public class Test {public static void main(String[] args) {Dog dog=Dog.getInstance();System.out.println(dog.toString());}
}
class Dog{private String name;private static Dog ming=new Dog("小狼");/**创建一个私有的构造器*/private Dog(String name){this.name=name;}/**创建一个公共的静态方法*/public  static Dog getInstance(){return ming;}@Overridepublic String toString() {return "Dog{" +"name='" + name + '\'' +'}';}
}

懒汉式

基于上述的饿汉式的缺点:创建对象却可以没有被使用,下面我们看看懒汉式

  1. 构造器私有化
  2. 定义一个静态属性,但是不去创建
  3. 提供一个公共的静态方法
  4. 只有用户使用对象时,才会返回这个对象,如果我们再次去调用这个函数,我们会返回上一次我们创建的对象。

我们来查看以下代码:可以发现我们在使用dog.age时,并未创建新的实例对象,也就没有占用空间,如果我们不使用name就不会去调用instannce方法。

public class Test {public static void main(String[] args) {System.out.println(Dog.age);Dog dog=Dog.getInstance();System.out.println(dog.toString());}
}
class Dog{private String name;public static int age=10;/** 创建一个私有的对象却不进行初始化*/private static Dog ming;/**创建一个私有的构造器*/private Dog(String name){System.out.println("构造器被调用");this.name=name;}/**创建一个公共的静态方法*/public  static Dog getInstance(){if (ming==null){ming=new Dog("小狼");}return ming;}@Overridepublic String toString() {return "Dog{" +"name='" + name + '\'' +'}';}
}

小结

饿汉式:在类加载时创建,可能存在资源浪费的问题

懒汉式:线程安全问题,多个线程同时访问,会发生冲突

Java中的单例设计模式相关推荐

  1. 笔记:Java中的单例设计模式

    之前接触过单例模式,当初不明白这样的设计用意,今天特地研究了下java中的单例设计模式的用处及用法. 单例模式:单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.一个类 ...

  2. 单例设计模式java,浅谈Java编程中的单例设计模式

    写软件的时候经常需要用到打印日志功能,可以帮助你调试和定位问题,项目上线后还可以帮助你分析数据.但是Java原生带有的System.out.println()方法却很少在真正的项目开发中使用,甚至像f ...

  3. java实现一个单例设计模式_Java正确实现一个单例设计模式的示例

    Java正确实现一个单例设计模式的示例 发布于 2021-1-12| 复制链接 分享一篇关于关于Java正确实现一个单例设计模式的示例,小妖觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的 ...

  4. Java面试题:单例设计模式、适配器模式的不同方式

    QUESTION:单例设计模式.适配器模式的不同方式? ANSWER: 1.单例设计模式,适配器设计模式     单利设计模式:             在java中,单例模式是指为了保证类在内存中只 ...

  5. 【单例】JAVA中的单例

    单例模式,属于创建类型的一种常用的软件设计模式.通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例. Java中单例模式定义:& ...

  6. 26、Java 简单实现单例设计模式(饿汉式和懒汉式)

    文章目录 一.概念 二.饿汉式 三.懒汉式 一.概念 ✏️[Singleton Pattern]如果一个类被设计成单例设计模式,则在整个应用程序运行过程中,该类只能存在一个实例. 二.饿汉式 思考:如 ...

  7. Java 多线程之单例设计模式

    转载:https://segmentfault.com/a/1190000007504892 概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍两种:懒汉式单例.饿汉 ...

  8. java中的单例_细说Java中的几种单例模式

    在Java中,单例模式分为很多种,本人所了解的单例模式有以下几种,如有不全还请大家留言指点: 饿汉式 懒汉式/Double check(双重检索) 静态内部类 枚举单例 一.饿汉式 image 饿汉式 ...

  9. python中的单例设计模式

    单例 -- 让 类 创建的对象,在系统中 只有 唯一的一个实例 定义一个 类属性,初始值是 None,用于记录 单例对象的引用 重写 __new__ 方法 如果 类属性 is None,调用父类方法分 ...

最新文章

  1. python tkinter 实现一个秒表 从0开始_Writeathon:从0开始实现的一个side project
  2. 函数 —— fgets()
  3. 在ubuntu下各种格式软件安装及常用命令
  4. 修改默认共享内存tmpfs大小
  5. 安装完kali应该做的基本配置
  6. 自己定义图片的progressbar
  7. 2022.3.27 学习韩顺平老师java基础
  8. 在【守望先锋】学习C++的类与对象
  9. 117道有关大数据面试题解析,希望对你有所帮助
  10. 三取二计算机,三取二是什么意思
  11. Oracle表空间查询
  12. Aspose.Words 删除批注
  13. 深度学习常用python库学习笔记
  14. ios虚拟机运行速度_iOS 8的采用速度减慢至虚拟停止
  15. 数字图像处理中的一些概念
  16. 北理计算机学院2004年机试真题
  17. Adobe系列安装问题汇总,遇到这些问题该怎么办
  18. 你的软路由还只是软路由么(当软路由遇上点心云~)
  19. 智能驾驶发展的前世今生 |既生瑜,何生亮,究竟何为PPP-RTK?
  20. 孙宏斌从贾跃亭手上拿走乐视电视:融创成乐融致新大股东

热门文章

  1. android9裁剪SystemUI桌面下拉quick Settings快捷设置菜单,隐藏settings自动旋转快捷键
  2. python爬取饿了么奶茶店外卖数据_喜茶、一点点、古茗……大数据揭秘网红奶茶真实外卖销量...
  3. 高阻态是0还是1_实惨!卖了1个月网签还是0!9月取证的楼盘们真实网签数据来了!...
  4. 2020年是时候迁移AndroidX了
  5. 吸顶灯怎么固定天花板_吊灯怎么固定在顶上的 吊灯安装要注意什么问题
  6. deebot扫地机器人怎么清洁_科沃斯扫地机器人如何保养及保养注意事项
  7. 【unity shader 入门精要 读书笔记】透明
  8. php购票排位_购票终于不用“站着”排队啦!
  9. Linux换行符和Windows换行符的区别与转换
  10. 入门必备 Android手机八大实用秘籍