`

单例模式详解

阅读更多
单例模式是众多模式中最简单的一个,了解单例模式及其应用对学习其他模式有很大帮助。但对于到底什么是单例模式,网上解释却不太容易理解,我根据自己的学习,对单例模式有了一定的了解,大家参考一下,有不对的地方请提提意见,在这里xiao yun~~先谢过了哈~~~~那么什么是单例模式呢?单例模式,是指某个类保证只创建一个实例,并且能够自己实例化这个对象而且能够向整个系统提供这个实例。显然单例模式的要点有三个;一是某各类只能有一个实例;二是它必须自行创建这个事例;三是它必须自行向整个系统提供这个实例。

单例模式又有三个变种,分别为饿汉式单例模式  、懒汉式单例模式 、登记式单例模式。

举个例子吧 

例一:饿汉式单例模式

//单态模式的理解与运用

//饿汉式单例

//为什么叫饿汉式单例呢,因为这个类一被加载就自己创建了一个对象,

//而不管你用没用到这个对象

view plaincopy to clipboardprint?

   1. public class Single { 
   2.  
   3. private static int count =0; 
   4.  
   5. //1.第一构造方法私有 
   6.  
   7. private Single(){ 
   8.  
   9. count ++; 
  10.  
  11. }; 
  12.  
  13. // 测试生成几个对象 
  14.  
  15. public static void getInfo(){ 
  16.  
  17. System.out.println(count); 
  18.  
  19. } 
  20.  
  21. //2. 由自己实例化对象 
  22.  
  23. private static final Single sl = new Single(); 
  24.  
  25. //3. 向整个系统提供本对象 
  26.  
  27. public static Single getSingle(){ 
  28.  
  29. return sl; 
  30.  
  31. } 
  32.  
  33. } 
  34.  
  35. 下面测试这个单例模式程序到底是不是能只生成一个实例 
  36.  
  37.  
  38. public class TestSingle { 
  39.  
  40. public static void main(String[] args){ 
  41.  
  42. //单利模式测试生成几个对象 
  43.  
  44. Single s1 = Single.getSingle(); 
  45.  
  46. Single s2 = Single.getSingle(); 
  47.  
  48. Single s3 = Single.getSingle(); 
  49.  
  50. Single s4 = Single.getSingle(); 
  51.  
  52. Single s5 = Single.getSingle(); 
  53.  
  54. Single.getInfo(); 
  55.  
  56. } 
  57.  
  58.  
  59. } 
  60.  
  61.  
  62. 由于例子写的注释写的很详细 我就不在具体解释了 
  63.  
  64. 下面的是饿汉式的例子 
  65.  
  66. //懒汉式单例模式 
  67.  
  68. public class Singleton { 
  69.  
  70. private static int count=0; 
  71.  
  72. private Singleton(){ 
  73.  
  74. count++; 
  75.  
  76. }; 
  77.  
  78. private static Singleton sn = null; 
  79.  
  80. synchronized public static  Singleton getSingleton(){ 
  81.  
  82. if(sn==null){ 
  83.  
  84.  sn = new Singleton(); 
  85.  
  86.  return sn; 
  87.  
  88. } 
  89.  
  90. else return sn; 
  91.  
  92. } 
  93.  
  94. public static void getInfo(){ 
  95.  
  96. System.out.println(count); 
  97.  
  98. } 
  99.  
100.  
101. } 

public class Single { private static int count =0; //1.第一构造方法私有 private Single(){ count ++; }; //测试生成几个对象 public static void getInfo(){ System.out.println(count); } //2.由自己实例化对象 private static final Single sl = new Single(); //3.向整个系统提供本对象 public static Single getSingle(){ return sl; } } 下面测试这个单例模式程序到底是不是能只生成一个实例 public class TestSingle { public static void main(String[] args){ //单利模式测试生成几个对象 Single s1 = Single.getSingle(); Single s2 = Single.getSingle(); Single s3 = Single.getSingle(); Single s4 = Single.getSingle(); Single s5 = Single.getSingle(); Single.getInfo(); } } 由于例子写的注释写的很详细 我就不在具体解释了 下面的是饿汉式的例子 //懒汉式单例模式 public class Singleton { private static int count=0; private Singleton(){ count++; }; private static Singleton sn = null; synchronized public static Singleton getSingleton(){ if(sn==null){ sn = new Singleton(); return sn; } else return sn; } public static void getInfo(){ System.out.println(count); } }

这里我要多说两句 到底懒汉和饿汉有什么区别呢 

并不是仅仅一个同步  同步只是为了保证线程安全的 ,因为 懒汉式不是和饿汉式一样,只是在需要的时候才创建实例,所以容易出现多了线程同时创建的情况  所以加上同步。现在知道他们为什么起这样奇怪的名字了吧!

接下来要说的是  什么时候才会用到单例呢  现在金融危机 就举个银行的例子吧 大家都知道银行都有总行和分行,那么总行做为一个类来说,它就应该采用单例模式,假设不是单例模式,总行可以创建多个实例,那么你在支行创建一个总行的对象存了一些钱,我也在支行创建一个对象存了一些钱,那么总行知道自己到底有多少钱么 不知道 ,因为对象不同。所以必须采取单例模式。大家会发现这两种单例有个缺点,就是不能被继承,为解决这个问题,又提出了登记式单例模式。例子我还没写出来。。。。。。。。。。待续  如果大家想学习设计模式,推荐大家一本书。《java与设计模式》,据说是国内相当来说比较好的,想要的留言,我发给你!
分享到:
评论

相关推荐

    单例模式详解~~单例模式详解~~

    单例模式是一种设计模式,它的主要目标是确保一个类只有一个实例,并提供一个全局访问点。在软件工程中,单例模式常用于控制资源的共享,比如数据库连接池、线程池或者日志系统等,这些资源通常需要全局唯一且高效地...

    C#单例模式详解 C#单例模式详解C#单例模式详解

    单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。在C#中,单例模式常用于管理共享资源或控制类的实例化过程,以提高性能、节约系统资源,特别是在整个应用程序生命周期内只需要一...

    Java设计模式-单例模式详解

    Java设计模式-单例模式详解 单例模式是 Java 设计模式中的一种常用的设计模式,旨在保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式的目的是为了保证在一个进程中,某个类有且仅有一个实例。 ...

    java设计模式之单例模式详解

    Java设计模式之单例模式详解 一、单例模式概览 单例模式(Singleton Pattern)是面向对象设计模式中的一种,属于创建型模式。它确保一个类仅有一个实例,并提供一个全局访问点来访问该实例。单例模式的核心在于控制...

    设计模式之单例模式详解.pdf

    设计模式之单例模式详解 单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。 单例模式的实现主要是...

    java 多线程单例模式详解

    ### Java多线程单例模式详解 #### 一、单例模式概述 单例模式(Singleton Pattern)是一种常用的软件设计模式,它确保一个类仅有一个实例,并提供一个全局访问点。这种模式通常用于那些需要频繁实例化然后销毁的...

    单例模式详解.txt

    单例模式的实现机制,并发情况下的单例模式的存在问题及解决方法,无锁的线程安全单例模式

    深入理解JavaScript系列(25):设计模式之单例模式详解

    单例模式是软件开发中一种非常重要的设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在JavaScript这样的动态语言中,单例模式的实现方式很多样,而且可以非常灵活。下面,我们就来深入探讨单例模式在...

    OC-单例OC-单例OC-单例OC-单例OC-单例

    单例模式的核心在于限制类的实例化过程,通过私有化构造方法并提供一个静态公共方法来获取唯一实例。在OC中,我们通常使用分类(Category)来隐藏初始化方法,同时利用GCD(Grand Central Dispatch)或NSLock来确保...

    C# 单例模式详解与线程安全性实现

    内容概要:本文详尽地阐述了 C# 中单例模式的设计思想以及其实现方式,并且特别针对单例模式的线例安全提供了多种解决方案,包括锁(lock),最终给出了一段非线程安全和一段线程安全版本的代码供参考。 适合人群:C# ...

    java单例模式详解

    Java单例模式是一种常见的设计模式,它用于控制类的实例化过程,确保一个类在整个应用程序中只有一个实例存在。这种模式通常用于管理共享资源或者需要频繁创建和销毁的对象,以节省系统资源并提供全局访问点。 单例...

    java单例模式详解Java系列2021.pdf

    在软件工程中,单例模式是创建型设计模式之一,其目的是确保一个类仅有一个实例,并提供一个全局访问点。Java语言中的单例模式实现有多种方式,包括饿汉式、懒汉式和登记式单例。不同的实现方式适应不同的场景和需求...

    IOS Swift3 四种单例模式详解及实例(PPT文档)

    在iOS开发中,单例模式是一种常见的设计模式,它确保一个类只有一个实例,并提供一个全局访问点。Swift3中,有四种主要的实现单例模式的方法。这些方法各有优缺点,适应不同的场景需求。以下是对这四种单例模式的...

    【课堂笔记】单例模式详解

    单例模式是软件设计模式中的一种经典模式,它在Java编程中被广泛使用。这个模式的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这样做的好处在于可以控制资源的共享,减少内存开销,以及简化对全局配置...

    IOS Swift3 四种单例模式详解及实例《PPT文档》

    单例模式是一种设计模式,它在软件工程中广泛用于确保类只有一个实例,并提供一个全局访问点。Swift3中,有四种常见的单例实现方式,每种都有其特点和适用场景。下面我们将详细讲解这四种单例模式并提供相应的实例。...

    PHP单例模式详解及实例代码

    PHP单例模式详解 单例模式的概念 单例模式是指整个应用中某个类只有一个对象实例的设计模式。具体来说,作为对象的创建方式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局的提供这个实例。它...

    C++设计模式-单例模式

    李建忠老师的设计模式-单例模式讲解,示例以C++编程语言呈现。

Global site tag (gtag.js) - Google Analytics