设计模式之单例模式

Posted flyingorchid

tags:

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

单例模式的定义:一个类只有一个实例,且该类能自行创建这个实例。(例子:电脑系统的任务管理器、回收站等)

单例模式的特点:

1.实现单例模式的类只有一个实例对象

2.该实例对象由单例类自己生成

3.单例类对外提供一个访问该单例的全局访问点

实现方式(一):真.懒汉模式

 1 public class SingleTon {
 2     // 1.自己创建对象,自给自足
 3     private static  SingleTon singleTon;
 4     // 2.加上private让外部的其他类无法通过new创建对象,不给别人new
 5     private SingleTon(){} 
 6     // 3.提供一个公共方法给外部,还是要给别人用
 7     public static  SingleTon getInstance(){
 8         if( singleTon == null){
 9             singleTon = new SingleTon();
10         }
11         return singleTon;
12     }
13 }

懒汉模式顾名思义就是需要使用的时候发现没有才去创建,而这种方式并没有考虑线程安全的问题。如果存在多个线程同时来调用getInstance方法就会生成多个实例对象,所有真的很懒,最好别这样。

优点:需要的时候才创建,减少了内存的初始压力                                     缺点:遇见多线程的情况相当于没用

实现方式(二):常用.懒汉模式

 1 public class SingleTon {
 2     // 1.自己创建对象,自给自足
 3     private static volatile SingleTon singleTon;
 4     // 2.加上private让外部的其他类无法通过new创建对象,不给别人new
 5     private SingleTon(){} 
 6     // 3.提供一个公共方法给外部,还是要给别人用
 7     public static synchronized SingleTon getInstance(){
 8         if( singleTon == null){
 9             singleTon = new SingleTon();
10         }
11         return singleTon;
12     }
13 }

懒汉模式常用的是这种类型的。通过关键字volatile和synchronized保证了在多线程的情况下也不掉链子,能够实现单例模式。

优点:同真.懒汉模式(这个倒是一脉相承)且线程安全                                               缺点:两个关键字保证了每次访问都需要同步,所以在性能上和资源消耗上要大一点

实现方式(三):饿汉模式

 1 public class SingleTon {
 2     // 1.自己创建对象
 3     private static volatile SingleTon singleTon = new SingleTon();
 4     // 2.加上private让外部的其他类无法通过new创建对象,不给别人new
 5     private SingleTon(){} 
 6     // 3.提供一个公共方法给外部,还是要给别人用
 7     public static synchronized SingleTon getInstance(){
 8         return singleTon;
 9     }
10 }

饿汉模式理解就是饿,有吃的跑的快,所以一上来就生成了实例对象,先捞到手再说,需要的时候直接用就行。

优点:因为是类一加载就创建了唯一实例对象,所以想通过多线程搞事情就没机会了                         缺点:一开始就加载到内存中,如果用的时候很晚会存在资源浪费

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

设计模式之单例模式

Java设计模式之单例模式

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

设计模式之单例设计模式

设计模式之单例模式

设计模式之单例模式