设计模式一(单例模式)

简介: 单例的设计模式,分为饿汉式单例模式和懒汉式单例模式

今天我们来探讨一下设计模式的创建型模式的第一个:单例模式

单例模式应用面特别的广泛,因为它的设计模式就是整个项目环境中只能存在一个静态对象实例,这就会使资源的复用性增强,避免了在项目中有些高频使用的对象频繁的创建和销毁,降低了系统的性能!

单例模式分为饿汉式的单例模式和懒汉式的单例模式!这两种都有各的好处,没有什么绝对的谁就一定更胜一筹的说法。


饿汉式单例模式

public class HungryMan {

     private static HungryMan hungryMan=new HungryMan();    


public static HungryMan getInstance(){

           return hungryMan;    

}

}

以上是创建了一个饿汉的类,里面就定义了一个静态的对象实例,并创建了一个静态方法让外界能够拿到此对象又不会暴露一些细节。这个线程是绝对安全的,因为这个是静态实例对象随着类的加载而加载,而JVM底层的初始化加载是线程安全的。


public static void main(String[] args) {

           HungryMan instance1 = HungryMan.getInstance();    

HungryMan instance2 = HungryMan.getInstance();    

System.out.println(instance1 == instance2);  //此答案为true

}


此时我们写一个主线程运行一下,成功通过饿汉类的静态方法拿到这个对象,为了证实从头到尾我们始终用的是同一个对象,我在取了两次对比,发现两者对象的地址值是相同的,由此可以说明就是同一个对象!像这种写法在各种框架底层或jdk底层都大量使用的,只要深入源码解析自然可以看到。(后期我也会写一些源码剖析的文章和大家一起讨论)



懒汉式单例模式


public class LazyMan {


   private volatile static LazyMan lazyMan;


   public static LazyMan getInstance(){

       if (lazyMan==null){

           synchronized (LazyMan.class){

               if (lazyMan==null){

                   return lazyMan=new LazyMan();                

}


           }

       }

       return lazyMan;    

}

}


上面就是懒汉式的一种常规写法,懒汉式与饿汉式不同的是,一个一开始就创建好另一个有需求了再创建。所以初始化时是一个空对象,这里用到了synchronize同步锁机制 是因为这个对象并不是类初始化时创建的,而是在有需求调用时才创建的,有可能会引发多线程调用同一个方法,破坏对象的单例设计模式,所以必须上锁!当第一个线程进入创建了对象后,后面的线程便不会再进行同步操作,而是直接返回对象了,不会因为同步而降低效率,这也凸显出设计模式的强大之处!


public static void main(String[] args) {

   LazyMan instance3 = LazyMan.getInstance();
   LazyMan instance4 = LazyMan.getInstance();
   System.out.println(instance3 == instance4); //true
}


最后同样多次调用方法取出对象,判断引用地址是否相同,结果也是显而易见的为true,就是懒汉式的单例模式。


最后总结:饿汉、懒汉各有好处,饿汉式在类加载变初始化成功,产生对象随时都可调用。懒汉式的按需加载,既可以节约内存空间,需要时又可以即时调用。具体要用哪种模式,要看业务需求适合哪种模式。真实世界上没有一个事物或人是完美无瑕的,只有适合自己的才是最好的。正如这篇文章一样如果你觉得还行,其中的内容也适合自己或身边朋友,可以评论或转发,这是给笔者莫大的鼓励哦!

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