java设计模式-单例模式(singleton)
2019-07-03 本文已影响38人
yiqiquhuxi
单例模式(singleton),属于创建型模式
单例模式实现方法有很多种,今天要讲的是其中两种,也是最简单,最常见的两种,饿汉模式和懒汉模式。
单例模式,顾名思义,在整个系统中,该对象只有一个实例,其特性和我们类中static修饰的变量差不多,不论多少线程操作该变量,该变量线程共享,实例只有一份。有人会问,那直接用static不就行了,干嘛还要用单例模式呢,因为static修饰的只是变量,而我们要操作的是对象,java抽象出来的对象。单例原则:
1:保证对象构造方法属于私有,不对外开放。
2:通过一个静态方法或者枚举返回单例类对象的唯一实例。
3:确保单例类的对象有且只有一个,尤其是多线程的环境下。
4:确保单例类对象在反序列化时不会重新构建对象
饿汉模式(对象先创建出来,我饿我先吃为敬)
懒汉模式(需要时候我在动,需要时候我在创建对象)
懒汉模式注意点:
饿汉模式属于线程安全,多线程情况下,我对象是先创建好的,不论谁来调用, 我给它提前创建好的对象,保证线程安全。
懒汉模式属于线程非安全,因为有if判断,如果有线程正在做if判断时候,另外线程正好也进来if,而第一个线程并没有执行完毕。这时候会返回两个新的对象,有违背了单例模式的原则。
应用场景:
1:电脑的资源管理器,不论点几下,只会有一个窗口弹出来。
2:电脑的回收站。
3:网站的计数器。
4:数据库连接池,为避免频繁打开和关闭数据库。
JDK使用实例:
java.lang.Runtime#getRuntime()
java.awt.Desktop#getDesktop()
java.lang.System#getSecurityManager()