码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之单例模式

时间:2020-03-31 21:01:01      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:自己   资源   内存   遇见   无法   实现   使用   ==   电脑系统   

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

单例模式的特点:

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 }

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

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

设计模式之单例模式

标签:自己   资源   内存   遇见   无法   实现   使用   ==   电脑系统   

原文地址:https://www.cnblogs.com/flyingorchid/p/12534647.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!