单例模式详解
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的微信公众号链接
本文出自 “往前迈” 博客,转载请与作者联系!
以上是关于单例模式详解的主要内容,如果未能解决你的问题,请参考以下文章