设计模式--单例模式

Posted lm970585581

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式--单例模式相关的知识,希望对你有一定的参考价值。

单例模式的意义

有些对象我们只需要一个:线程池、缓存、硬件设备等

如果多个实例会有造成冲突、结果的不一致性等问题

是否可以用静态变量方式来实现?

或者程序员之间协商个全局变量?

 

单例模式:确保一个类最多只有一个实例,并提供一个全局访问点 

单例模式类图:

技术分享图片

把构造函数私有化,getInstance中判断uniqueInstance是否已经实例化,若已经实例化直接返回,否则实例化后返回

代码演示:

package com.java.jikexueyuan.singleton;

public class Singleton {
    
    private static Singleton uniqeInstance=null;
    
    private Singleton(){
        
    };
    
    public static Singleton getInstance()
    {
        if(uniqeInstance==null)
        {
            uniqeInstance=new Singleton();
        }
        return uniqeInstance;
        
    }

}

单例模式的优化

多线程问题

  可能会出现创建多个实例的情况

 

优化:

  同步(synchronized)getInstance方法:频繁情况比较耗资源

  “急切”创建实例(饿汉式):在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快

双重检查加锁

  技术分享图片

 

以上是关于设计模式--单例模式的主要内容,如果未能解决你的问题,请参考以下文章

常用代码片段

性能比较好的单例写法

你熟悉的设计模式都有哪些?写出单例模式的实现代码

单例模式以及静态代码块

设计模式之单例模式

设计模式之单例模式