设计模式之——单例模式
Posted Java老僧
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之——单例模式相关的知识,希望对你有一定的参考价值。
福利干货第一时间送达!
1public class Singleton {
2
3 // 私有静态实例 这样就能不被引用 为实现延迟加载 我们赋值null
4 private static Singleton instance = null;
5 // 让构造函数为 private,这样该类就不会被实例化
6 private Singleton() {
7 }
8 //创建实例
9 public static Singleton getInstance() {
10 if (instance == null) {
11 instance = new Singleton();
12 }
13 return instance;
14 }
15 public void saySingleton() {
16 System.out.println("Hello Singleton");
17 }
18}
1public class SingletonTest {
2 public static void main(String[] args) {
3 Singleton object = Singleton.getInstance();
4 object.saySingleton();
5 }
6}
3. 测试结果为
1Hello Singleton
四 . 发现问题
1 //创建实例
2 public static synchronized Singleton getInstance() {
3 if (instance == null) {
4 instance = new Singleton();
5 }
6 return instance;
7 }
3. 我们又开始解决像懒汉式,线程安全这种虽然使用了synchronized保证了线程安全但又在性能上的下降,于是我们用双检锁/双重校验锁创建,采用这种双锁机制,我们的程序就能安全的在多线程的环境下保持较高性能,我们将代码修改如下。
1 public static Singleton getInstance() {
2 if (instance == null) {
3 synchronized (instance) {
4 if(instance == null){
5 instance = new Singleton();
6 }
7 }
8 }
9 return instance;
10 }
4. 讲完了上面几种我们在说一下还有一种称为饿汉式创建单例对象实现方式,这种方式没有synchronized,执行效率比较高,但它在类加载的时候就初始化,比较浪费系统资源。
1public class Singleton {
2
3 private static Singleton instance = new Singleton();
4 private Singleton() {
5 }
6 public static Singleton getInstance() {
7 return instance;
8 }
9}
通过单例模式的学习,我们知道了单例模式虽然理解起来简单但,但是具体实现起来还是有一定的难度,我们要通过设计模式的学习去掌握代码设计的思维这样我们才会不断的提高。
以上是关于设计模式之——单例模式的主要内容,如果未能解决你的问题,请参考以下文章