单例模式详解

Posted

tags:

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

喜欢一句话“得按你想的去生活,否则,你迟早会按你的生活去想“,软件设计也是这样,不能只停留在重复的写代码,否则,你迟早将被代码包围。应该去反复思考实践,整理出属于自己的代码仓库。


技术分享



单例模式简述

确保一个类只有一个实例,并且提供一个全局的访问点。

单例类主要特征

技术分享 

如何创建一个单例类?

实例一

public class Singleton {
    
//一个静态的实例
    
private static Singleton singleton;
    
//私有化构造函数
    
private Singleton(){}
    
//给出一个公共的静态方法返回一个单一实例
    
public static Singleton getInstance(){
        
if (singleton == null) {
            
singleton new Singleton();
        
}
        
return singleton;
    
}
}

实例一就创建了一个单例类,但这个类不支持多线程,当整个系统同时请求的时候就会存在创建了多个实例的情况,所以写这样的代码存在风险。

实例二

public class Singleton{
    
//定义一个静态的实例
    
private static Singleton singleton;
    
//私有化构造函数
    
private Singleton(){}
    
//增加同步方法
    
public static synchronized Singleton getInstance(){
        
if (singleton == null) {
            
singleton new Singleton();
        
}
        
return singleton;
    
}
}

实例二在实例一基础上进行了优化,是常见的形式,但使用同步方法会降低代码执行效率。

实例三

public class Singleton {
    
//定义一个静态的实例
    
private static Singleton singleton;
    
//私有化构造函数
    
private Singleton() {}
    
//双重锁的形式
    
public static Singleton getInstance() {
        
if (singleton == null) {
            
synchronized (Singleton.class) {
                
if (singleton == null) {
                    
singleton new Singleton();
                
}
            }
        }
        
return singleton;
    
}
}

实例三在实例二基础上进行了优化,使用同步代码块的方式,增加了代码执行效率。

实例四

public class Singleton {
    
//在自己内部定义自己的一个实例,只供内部调用
    
private static final Singleton singleton new Singleton();
    
//私有化构造函数
    
private Singleton() {}
    
//提供一个外部访问的静态方法
    
public static Singleton getInstance() {
        
return singleton;
    
}
}

实例四通过类自身创建一个实例,而不是使用的时候再创建。

总结:

单例模式的本质是保证环境中有且只有一个目标对象的实例,并且提供一个全局接口对外界提供这个对象。单例模式能够有效地降低对象的创建、回收频次,减轻了对内存访问的压力。

当需要控制一个对象的实例只能有一个,而且系统只能从一个全局节点访问它时,可以使用单例模式。

更多原创内容,欢迎关注我的公众号交流学习,谢谢阅读!

微信公众号链接 BobWen的微信公众号链接

本文出自 “往前迈” 博客,转载请与作者联系!

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

Java 单例模式详解

三单例模式详解

单例模式详解

单例模式详解

单例模式详解

单例模式详解