1、什么是设计模式(Design pattern)

开发中经常遇到一些问题,一个问题通常有n种解法的,但其中肯定有一种解法是最优的,这个最优的解法被人总结出来了,称之为设计模式。
设计模式有20多种,对应20多种软件开发中会遇到的问题。
学设计模式主要学2点:
第一:这种模式用来解决什么问题;
第二:遇到这种问题了,该模式是怎么写的,他是如何解决这个问题的。

2、单例模式是什么?

  • 可以保证系统中,应用该模式的这个类永远只有一个实例,即一个类永远只能创建一个对象。
  • 使用场景:例如电脑的任务管理器对象,我们只需要一个就可以解决问题了,这样可以节省内存空间。

3、单例的实现方式

饿汉单例模式;
懒汉单例模式;

(1) 饿汉单例设计模式
在使用类获取对象的时候,对象已经提前为你创建好了。

设计步骤:

第一,定义一个单例类;
第二,单例必须将构造器私有化,将构造器藏起来,防止对外产生对象;
第三,定义一个静态变量存储一个对象即可:属于类,与类一起加载一次。

//1.定义一个单例类
public class SingleInstance {
//    2.单例必须将构造器进行私有化,防止对外产生对象private SingleInstance() {}
//    3.饿汉单例是在获取对象前,已经提前准备好一个对象;这个对象只能是一个,所有定义静态变量存储public static SingleInstance instance = new SingleInstance();
}
/**单例测试类目标:理解饿汉单例的设计步骤*/
public class SingleInstanceTest {public static void main(String[] args) {SingleInstance s1 = SingleInstance.instance;    //获取对象SingleInstance s2 = SingleInstance.instance;System.out.println(s1 == s2);}
}

控制台输出结果:

 饿汉单例重点总结

1、饿汉单例的实现步骤?

  • 定义一个类,把构造器私有化(防止对外产生对象)
  • 定义一个变量存储一个对象(调用类时,对象已经准备好了,与类一起加载一次)

(2) 懒汉单例设计模式

  • 在真正需要该对象的时候,才去创建一个对象(延迟加载对象)。

  • 设计步骤:

    • 第一,定义一个类,把构造器私有化:防止对外产生对象;
    • 第二,定义一个静态变量存储一个对象即可:属于类,与类一起加载一次;
    • 第三,必须提供一个方法返回一个单例对象-
//1.定义一个懒汉单例类
public class SingleInstance02 {
//    2.必须将构造器私有化:防止对外产生对象private SingleInstance02(){}
//    3.定义静态变量存储一个对象;与类一起加载,只加载一次。最好做到私有化,这样可以避免给别人挖坑,公开化别人只会拿到一个null。private static SingleInstance02 instance02;
//    4.提供一个方法,获取一个单例对象 再return返回单例对象public static SingleInstance02 getInstance02(){if (instance02 == null){instance02 = new SingleInstance02();}return instance02;}
}
public class SingleInstanceTest02 {public static void main(String[] args) {
//        获取对象SingleInstance02 s1 = SingleInstance02.getInstance02();SingleInstance02 s2 = SingleInstance02.getInstance02();System.out.println(s1 == s2);}
}

控制台输出结果:

懒汉单例重点总结

1、懒汉单例的实现步骤?

  • 定义一个单例类,把构造器私有化(防止对外产生对象)
  • 定义一个私有化的静态变量,用于存储一个对象,不设初始值
  • 提供一个返回单例对象的方法

static应用知识:单例设计模式相关推荐

  1. java static是单例_JAVA基础-static关键字及单例设计模式

    static关键字 基本概念使用static关键字修饰成员变量表示静态的含义, 此时成员变量由对象层级提升为类层级, 也就是整个类只有一份并被所有对象共享. 该成员变量随着类的加载准备就绪, 与是否创 ...

  2. 使用static代码块实现线程安全的单例设计模式

    实现线程安全的单例设计模式的三种方式: DCL双检查锁机制实现线程安全 使用静态内置类实现线程安全 使用static代码块实现线程安全 -------------------------------- ...

  3. JavaSE面向对象:继承、多态、Super、Object类、重写、static、final、静态成员、懒汉式、饿汉式、单例设计模式、初始化块、抽象类、抽象方法、接口

    感谢尚硅谷免费提供的视频 继承 ** 理解 ** 生活中的继承:子女继承了父母的财产或相貌或才华 java中的继承:一个类不用自己定义属性或方法,就已经具备了另一个类的属性和方法 把这种现象称为jav ...

  4. java 单例内部类_9 java的关键字static、单例设计模式、初始化块、关键字final、抽象类、接口、内部类...

    static关键字 当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用.我们有时 ...

  5. Java查漏补缺(08)关键字:static、单例设计模式、理解main方法、类的成员之四:代码块、final关键字、抽象类、接口、内部类、枚举类、注解、包装类

    Java查漏补缺(08)关键字:static.单例设计模式.理解main方法.类的成员之四:代码块.final关键字.抽象类.接口.内部类.枚举类.注解.包装类 本章专题与脉络 1. 关键字:stat ...

  6. python基础知识整理 第七节:单例设计模式、异常、模块、包、制作模块、文件

    1.单例设计模式 单例设计模式就是为对象在内存中分配空间的时候,永远只会返回一个唯一的固定的内存空间.这样就能保证在内存中这个类的对象只有唯一的一份,这个就叫做单例.(为对象分配空间使用的是内置方法_ ...

  7. java设计扑克牌比大小_2019-08-09Day10 单例设计模式,扑克牌比大小游戏(Java)

    目的 学习了解单例设计模式的相关知识,并在前几天Java学习的基础上,完善所学的知识,完成扑克牌比大小的游戏,能实现的功能有,游戏显示页面,玩家信息页面(包括玩家姓名 编号 所持有的资金),生成一副扑 ...

  8. 结合Spring源码学习单例设计模式

    之前我学习了 Spring Ioc,明白了 Spring IoC 容器是一个管理Bean的容器,在Spring的定义中,它要求所有的IoC容器都需要实现接口 BeanFactory ,它是一个顶级容器 ...

  9. 单例设计模式详解。。。。。。。。。。。

    public class Demo01 { public static void main(String[] args) { // TODO Auto-generated method stub /* ...

最新文章

  1. MXNet中依赖库介绍及简单使用
  2. Bag of Tricks for Efficient Text Classification论文阅读及实战
  3. python的官方网站地址是什么-python赋值和地址
  4. Consumer设计-high/low Level Consumer
  5. mysql有选择地输出数据_有条件地选择MYSQL列
  6. Tkinter的Scrollba组件
  7. 如何quot;优雅quot;地终止一个线程?
  8. 附录:更多列表操作命令
  9. oracle统计学生成绩c,Oracle11g学生成绩管理系统.docx
  10. java怎么访问私有类_如何从Java类的外部访问类的私有方法?
  11. AndroidM 内核空间到用户空间接口类型
  12. x264的交叉编译和移植
  13. (jdbc和cmd)sqlite数据迁入mysql(导入导出)
  14. linux ghost dd,在Linux上用dd命令实现ghost功能
  15. python判断密码是否正确_菜鸟使用python实现正则检测密码合法性
  16. 传说中的“猴年马月”就要来了,感觉很多愿望都要实现啦!
  17. springboot实现任务调度的第三种方式------使用第三方quartz插件调度(springBoot+quartz+cronTrigger进行任务调度)
  18. SOUI中菜单的简单实现
  19. 计算机用户界面的设计,计算机软件用户界面设计的基本原则
  20. 工业互联网+安全生产 | 面向安全生产的工业互联网解决方案

热门文章

  1. 圣诞html源代码,html5 3D圣诞树源码
  2. java:单词接龙(dfs)(重点看看:包括相同单词不包含,还有找到第一个相同的开头单词相同的字母,连接字符串重复部分删除)
  3. 什么是ECShop二次开发?
  4. 论文阅读:3D multi-scale, multi-task, and multi-label deep learning for prediction of lymph node metasta
  5. NUS CS5477 assignment1
  6. DSP实验——TSM320F2812
  7. 支付宝APP支付(java后台版)
  8. Nuke中的各类结点及使用方法
  9. Lies, dxmn lies and Chin-ese science ~~where all the truth gone?
  10. Java识别PDF文字内容的方法