设计模式---单例模式 (转)

简介: 看别人写的设计模式 觉得很好。  引用别人的 自己就不造轮子了。。。。。  转载  http://liuqing9382.iteye.com/blog/1441661 单例模式: 三个要点: 1.某个类只能有一个实例。

 看别人写的设计模式 觉得很好。

 引用别人的 自己就不造轮子了。。。。。

 转载  http://liuqing9382.iteye.com/blog/1441661

单例模式:
三个要点:
1.某个类只能有一个实例。
2.它必须自行创建这个实例;
3.它必须自行向外提供这个实例。

饿汉式:

 

public class Singleton{   
  
   private static Singleton singleton = new Singleton ();   
  
   private Singleton (){}   
  
   public Singleton getInstance(){   
  
     return singletion;   
  
   }   
  
}   

 优点:

    1.线程安全
    2.在类加载的同时已经创建好一个静态对象,调用时反应速度快
缺点:
      资源效率不高,可能getInstance()永远不会执行到,但执行该类的其他静态方法或者加载了该类(class.forName),那么这个实例仍然初始化 
    

懒汉式: (懒加载的思想,用到才会初始化实例)

public class Singleton{   
  
private static Singleton singleton = null;   
  
public static synchronized Singleton getInstance(){   
  
if(singleton==null){   
  
singleton = new Singleton();   
  
}   
  
return singleton;   
  
}   
  
}   

 优点:
资源利用率高,不执行getInstance()就不会被实例,可以执行该类的其他静态方法
缺点:
    第一次加载时不够快,多线程使用不必要的同步开销大
比较:
饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变。
懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的,
推荐使用第一种
  假设多线程访问的时候,线程1在在new Instence() 系统分配内存需要0.01秒时间 ,但就这这个0.01秒 又有其他的线程访问了,这时候就要再次instance 还是为null  又要再次new

  导致了线程不安全。

 

双重检测:

class Singleton4 {   
private Singleton4() {}   
    
public static Singleton4 instance = null;   
    
public static Singleton4 getInstance() {   
if (instance == null) {   
synchronized (Singleton4.class) {   
if (instance == null) {   
instance = new Singleton4();   
}   
            }   
}   
return instance;   
}   
}  

 

优点:
资源利用率高,不执行getInstance()就不被实例,可以执行该类其他静态方法
缺点:
    第一次加载时反应不快,由于java内存模型一些原因偶尔失败

 

静态内部类:

 

class Singleton5 {   
private Singleton5() {}   
     private static class SingletonHelp {   
static Singleton5 instance = new Singleton5();   
}   
public static Singleton5 getInstance() {   
    return SingletonHelp.instance;   
}   
}  

 

优点:
    资源利用率高,不执行getInstance()不被实例,可以执行该类其他静态方法
缺点:
    第一次加载时反应不够快

 

 

 

 

 

 

 

 


 

 


 

 

目录
相关文章
|
5月前
|
设计模式 安全 Java
设计模式之---单例模式
设计模式之---单例模式
35 0
|
1月前
|
设计模式 缓存 安全
单例模式--设计模式
单例模式--设计模式
16 0
|
9月前
|
传感器 设计模式 算法
[设计模式] --- 模板方法模式
[设计模式] --- 模板方法模式
48 0
|
5月前
|
设计模式 安全 Java
面试~设计模式---单例模式
面试~设计模式---单例模式
27 0
|
9月前
|
存储 设计模式 Java
设计模式——单例模式
设计模式——单例模式
62 0
|
9月前
|
存储 设计模式 安全
设计模式--单例模式
所谓类的单例模式 就是采取一定的方法保证在整个软件系统中对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)  比如 Hibemate的SessionFactory 它充当数据存储源的代理 并负责创建Session对象 SessionFactory并不是轻量级的 一般情况下 一个 项目通常只需要一个SessionFactory就够 这样就需要用到单例模式了
62 0
设计模式--单例模式
|
10月前
|
设计模式 安全 Java
【设计模式】单例模式
【设计模式】单例模式
|
11月前
|
设计模式 消息中间件 安全
一起来学设计模式之单例模式
前言 目前正在出一个设计模式专题系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~ 本节给大家讲一下设计模式中的单例模式~ 本专题的所有案例代码主要以Java语言为主, 好了, 废话不多说直接开整吧~ 单例模式 上节带大家看了一下设计模式的基本概念,本节带大家一起实现一下设计模式中的单例模式。 单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点。 单例模式适用于需要确保系统中只有一个实例,并且需要提供一个全局访问点的场景,比如线程池、日志系统、配置文件管理器等。
|
设计模式 Java
18 java设计模式---单例模式
1 什么是单例模式 单例(单个实例)模式:采用一定方法,保证在整个系统中对某个类只能存在一个实例对象,并且本类只提供一个提取对象的方法
71 0
|
设计模式 安全 Java
设计模式学习05----之单例模式
单例模式,是我们最常用也最熟悉的一种设计模式,其使用要注意线程安全。
72 0