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

简介: 看别人写的设计模式 觉得很好。  引用别人的 自己就不造轮子了。。。。。  转载  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()不被实例,可以执行该类其他静态方法
缺点:
    第一次加载时反应不够快

 

 

 

 

 

 

 

 


 

 


 

 

目录
相关文章
|
2月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
29 2
|
12天前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
26 4
|
21天前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
|
4天前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
|
29天前
|
设计模式 存储 数据库连接
PHP中的设计模式:单例模式的深入理解与应用
【10月更文挑战第22天】 在软件开发中,设计模式是解决特定问题的通用解决方案。本文将通过通俗易懂的语言和实例,深入探讨PHP中单例模式的概念、实现方法及其在实际开发中的应用,帮助读者更好地理解和运用这一重要的设计模式。
19 1
|
12天前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
21 0
|
2月前
|
设计模式 存储 数据库连接
PHP中的设计模式:单例模式的深入解析与实践
在PHP开发中,设计模式是提高代码可维护性、扩展性和复用性的关键技术之一。本文将通过探讨单例模式,一种最常用的设计模式,来揭示其在PHP中的应用及优势。单例模式确保一个类仅有一个实例,并提供一个全局访问点。通过实际案例,我们将展示如何在PHP项目中有效实现单例模式,以及如何利用这一模式优化资源配置和管理。无论是PHP初学者还是经验丰富的开发者,都能从本文中获得有价值的见解和技巧,进而提升自己的编程实践。
|
2月前
|
设计模式 安全 Java
C# 一分钟浅谈:设计模式之单例模式
【10月更文挑战第9天】单例模式是软件开发中最常用的设计模式之一,旨在确保一个类只有一个实例,并提供一个全局访问点。本文介绍了单例模式的基本概念、实现方式(包括饿汉式、懒汉式和使用 `Lazy<T>` 的方法)、常见问题(如多线程和序列化问题)及其解决方案,并通过代码示例详细说明了这些内容。希望本文能帮助你在实际开发中更好地应用单例模式,提高代码质量和可维护性。
36 1
|
2月前
|
设计模式 缓存 数据库连接
探索PHP中的设计模式:单例模式的实现与应用
在PHP开发中,设计模式是提高代码可复用性、可维护性和扩展性的重要工具。本文将深入探讨单例模式(Singleton Pattern)的基本概念、在PHP中的实现方式以及实际应用场景。单例模式确保一个类仅有一个实例,并提供全局访问点。通过具体代码示例和详细解释,我们将展示如何在PHP项目中有效利用单例模式来解决实际问题,提升开发效率和应用性能。
|
2月前
|
设计模式 存储 测试技术
PHP中的设计模式:单例模式的深入解析与实践
在PHP开发领域,设计模式是解决常见问题的最佳实践。本文将深入探讨单例模式,一种确保类只有一个实例的设计模式,并提供实际应用示例。我们将从单例模式的基本概念讲起,通过实际案例展示如何在PHP中实现单例模式,以及它在不同场景下的应用和优势。最后,我们会探讨单例模式的优缺点,帮助开发者在实际项目中做出明智的选择。