简单 单例模式(饿汉 ,懒汉)

原创 2018年04月15日 19:59:09

经典的单例模式有三种,懒汉式、饿汉式和 登记式。

懒汉式的特点是延迟加载,比如配置文件,采用懒汉式的方法,顾名思义,懒汉么,很懒的,配置文件的实例直到用到的 
时候才会加载。。。。。。

饿汉式的特点是一开始就加载了,如果说懒汉式是“时间换空间”,那么饿汉式就是“空间换时间”,因为一开始就创建了实例,所以每次用到的之后直接返回就好了。

让我们先看下代码:

懒汉式:

    //懒汉式单例模式  
    public class MySingleton {  

        //设立静态变量  
        private static MySingleton mySingleton = null;  

        private MySingleton(){  
            //私有化构造函数  
            System.out.println("-->懒汉式单例模式开始调用构造函数");  
        }  

        //开放一个公有方法,判断是否已经存在实例,有返回,没有新建一个在返回  
        public static MySingleton getInstance(){  
            System.out.println("-->懒汉式单例模式开始调用公有方法返回实例");  
            if(mySingleton == null){  
                System.out.println("-->懒汉式构造函数的实例当前并没有被创建");  
                mySingleton = new MySingleton();  
            }else{  
                System.out.println("-->懒汉式构造函数的实例已经被创建");  
            }  
            System.out.println("-->方法调用结束,返回单例");  
            return mySingleton;  
        }  
    }  

饿汉式:

    //饿汉式单例模式  
    public class MySingleton2 {  

        //设立静态变量,直接创建实例  
        private static MySingleton2 mySingleton = new MySingleton2();  

        private MySingleton2(){  
            //私有化构造函数  
            System.out.println("-->饿汉式单例模式开始调用构造函数");  
        }  

        //开放一个公有方法,判断是否已经存在实例,有返回,没有新建一个在返回  
        public static MySingleton2 getInstance(){  
            System.out.println("-->饿汉式单例模式开始调用公有方法返回实例");  
            return mySingleton;  
        }  
    }  
总结一下,两种方案的构造函数和公用方法都是静态的(static),实例和公用方法又都是私有的(private)。但是饿汉式每次调用的时候不用做创建,直接返回已经创建好的实例。这样虽然节省了时间,但是却占用了空间,实例本身为static的,会一直在内存中带着。懒汉式则是判断,在用的时候才加载,会影响程序的速度。最关键的是,在并发的情况下,懒汉式是不安全的。如果两个线程,我们称它们为线程1和线程2,在同一时间调用getInstance()方法,如果线程1先进入if块,然后线程2进行控制,那么就会有两个实例被创建。

实现类似Windows资源管理器的DataGrid

在DataGrid中,我们可以实现类似Windows资源管理器的效果,即对列进行排序,该列颜色与其它列不同。下面就是实现的代码:DataGridLikeWindowsExplorer.aspx@ Pa...
  • net_lover
  • net_lover
  • 2003-11-04 01:30:00
  • 3429

Java单例模式之懒汉模式及饿汉模式

单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类...
  • liyaning521
  • liyaning521
  • 2017-03-21 20:05:56
  • 281

Java单例模式--饿汉式、懒汉式需要怎么写

Java 单例模式 饿汉 懒汉 spring IOC中使用懒汉式、饿汉式
  • u013905744
  • u013905744
  • 2016-10-07 14:23:31
  • 4027

C++中的单例模式(懒汉、饿汉)

单例模式存在的意义是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。...
  • king457757706
  • king457757706
  • 2016-07-12 11:46:04
  • 2135

设计模式:单例模式,懒汉与饿汉

在某些情况下,有些对象只需要一个就可以了,换句话说,每个类只需要一个实例。比如,一台计算机连接多台打印机,但这个计算机上打印程序只能有一个,这里就需要单例模式来避免打印机左右同时输入到打印机中。、 单...
  • sinat_33057149
  • sinat_33057149
  • 2017-10-12 18:23:06
  • 77

设计模式-单例模式(饿汉式及懒汉式的Java实现)

单例模式单例模式在程序设计中使用的频率非常之高,其设计的目的是为了在程序中提供唯一一个对象(保证只被构造一次),例如写入日志的log对象,windows的任务管理器实现(只能打开一个)。这里主要介绍单...
  • zjx409
  • zjx409
  • 2015-08-03 22:57:41
  • 5683

【单例模式】——饿汉模式与懒汉模式及其区别

单例模式是我们在开发过程中使用最多的一种设计模式。单例模式定义与作用就是保证整个程序中某个实例有且只有一个。我们都知道创造实例是通过构造方法来实现的,只要有构造方法,就可以创建实例。 一、单例模式构...
  • wpda_csdn
  • wpda_csdn
  • 2015-05-03 17:47:16
  • 5715

单例模式中的懒汉模式和饿汉模式的最优写法

废话不多说,直接上最优写法: 懒汉模式: class Singleton { private volatile static Singleton singleton; pri...
  • liufangbaishi2014
  • liufangbaishi2014
  • 2016-11-07 22:01:45
  • 949

C++实现一个单例模式(懒汉与饿汉)

单例模式的特点: 1、一个类只能有一个实例。 2、一个类必须自己创建自己的唯一实例。 3、一个类必须给所有其他对象提供这一实例。单例模式的实现: 1、将构造函数声明为private防止被外部函...
  • scmuzi18
  • scmuzi18
  • 2017-08-11 22:15:23
  • 459

设计模式 之 单例模式 (C++ 懒汉经典实现 & DCL实现 & 饿汉经典实现)

顾名思义: 单例模式,指的是仅有一个(类)实例。 即: 在应用程序的整个生命周期中,任何时刻,某个类(单例类)仅存在唯一一个实例。 同时仅提供一个全局访问点。 单例的实现一般要求满足: (1) 类...
  • u013575812
  • u013575812
  • 2016-03-27 02:52:26
  • 1844
收藏助手
不良信息举报
您举报文章:简单 单例模式(饿汉 ,懒汉)
举报原因:
原因补充:

(最多只允许输入30个字)