设计模式之单例模式

Posted blog-xiao

tags:

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

网上讲解单例模式的文章已经很多了,但是没有我的原创,所以要写一个.

单例模式是设计模式中的经典之一,主要的作用就是保证只有一个实例被创建.

单例模式分为饥汉模式和饱汉模式,饥汉模式是指在一开始就创建实例;饱汉模式是指在需要时才创建实例

以下是饱汉模式:

 1 public class SingleTon {
 2     public static SingleTon instance = null;
 3     
 4     public SingleTon(){};
 5     
 6     public static SingleTon getInstance() {
 7         if(instance == null) {
 8             instance = new SingleTon();
 9         }
10         return instance;
11     }
12     
13 }

饥汉模式:

1 public class SingleTon {
2     public SingleTon(){};
3     private static SingleTon instance = new SingleTon();
4     public static SingleTon getInstance() {
5         return instance;
6     }
7 }

总结来说:创建单例模式主要有两个个步骤:

1.构造方法私有化

2.提供返回实例的静态方法

在单线程环境下这样创建单例模式是没有问题的,但是在多线程环境下可能就不能保证只创建一个实例.针对饱汉模式解决办法如下:

1 synchronized (SingleTon.class) {
2             if(instance == null) {
3                 instance = new SingleTon();
4             }
5         }

即在创建实例外层加上synchronized 模块,保证在同一时间只有一个线程能访问创建实例的方法,但是也会有影响效率的问题,为了避免每次到这个方法时造成线程排队,所以可以进一步优化:双重检查

1 if(instance == null) {
2             synchronized (SingleTon.class) {
3                 if(instance == null) {
4                     instance = new SingleTon();
5                 }
6             }
7         }

在synchronized 外层在判断一次实例是否被创建,通过双层检查的模式可以兼顾线程安全和性能.

 

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

设计模式之单例模式

Java设计模式之单例模式

设计模式之单例模式以及简单代码实现

设计模式之单例设计模式

设计模式之单例模式

设计模式之单例模式