单例模式实现方法之懒汉式、饿汉式

Singleton 单例模式是一种经常在项目开发中使用的程序设计模式,它用于创建一个全局共享的实例对象。该实例对象在整个应用程序中只有一个,不会出现更多的该实例对象。

实现原理就是将类的构造方法私有化,即使用private修饰符来修饰构造方法,这样外部就不能使用构造方法创建对象了,本类内部还是能够创建对象的,所以,可以创建一个本类类型的成员变量来保存本类的唯一对象,然后提供属性访问器方法获取这个唯一的实例,但是每次获取的都是同一个对象,而不是重新创建的。

接下来将介绍两种比较常用方法来实现单例模式。

一.

懒汉式:当程序第一次访问单例模式实例时才进行创建 。

public class Lazy {
  public static Lazy instance = null; //本类的唯一实例
  private Lazy() {
    //构造方法私有化
  }
  public synchronized static Lazy getInstance() {      //获取唯一实例
    if(instance==null)    instance = new Lazy();
  return instance;  
  }
}

二.

饿汉式:在程序启动或单例模式类被加载的时候,单例模式实例就已经被创建。

public class Hungry {
    private static Hungry instance = new Hungry();//本类的唯一实例
    private Hungry() {
        //构造方法私有化
    }
    public static Hungry getInstance() {    //获取唯一实例
    return instance;
    }
}    

如何选择这两种方法呢?

如果单例模式实例在系统中经常会被用到,饿汉式式一个不错的选择。

如果单例模式在系统中会很少用到或者几乎不会用到,那么懒汉式是一个不错的选择。

原文地址:https://www.cnblogs.com/czsy/p/8747117.html

时间: 2024-09-28 10:18:39

单例模式实现方法之懒汉式、饿汉式的相关文章

单例模式的各种写法和总结 懒汉式 饿汉式 登记式

public class Singleton {//懒汉式单例类 /** 懒汉式单例类. 只在外部对象第一次请求实例的时候才会去创建 优点:第一次调用时才会初始化,避免内存浪费. 缺点:必须加锁synchronized 才能保证单例 */ private static Singleton singleton; private static final ReentrantLock lock = new ReentrantLock(); private static AtomicInteger co

Spring -11 -单例设计模式 -懒汉式/饿汉式(idea默认的)

单例设计模式 作用: 在应用程序有保证最多只能有一个实例. 好处: 2.1 提升运行效率. 2.2 实现数据共享. 案例:application 对象 懒汉式 3.1 对象只有被调用时才去创建. 3.2  示例代码 3.3由于添加了锁,所以导致效率低. public class lazySingleton { //懒汉式,单例模式! //由于对象需要被静态方法调用,把方法设置为static //由于对象是static,必须要设置访问权限修饰符为private , //如果是public 可以直接

单例设计模式---懒汉式+饿汉式

package com.Thread; /** * 单例设计模式:确保一个类只有一个对象 */ public class Synchronized_Singleton { public static void main(String[] args) { JvmThread jvm1= new JvmThread(100); JvmThread jvm2= new JvmThread(100); jvm1.start(); jvm2.start(); } } /** * 懒汉式(饿汉式:在声明静态

单例模式的简单描述(饿汉式,饱汉式,双重锁模式)

一.什么时候使用单例模式: 当实例存在多个会引起程序逻辑错误的时候 二.好处: 1.减少内存的占用 2.单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例. 3.因为类控制了实例化过程,所以类可以灵活更改实例化过程 三.缺点: 1.开销 虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销.可以通过使用静态初始化解决此问题. 2.可能的开发混淆 使用单例对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用new关键字实例化对

[转]设计模式--单例模式(一)懒汉式和饿汉式

单例模式是设计模式中比较简单的一种.适合于一个类只有一个实例的情况,比如窗口管理器,打印缓冲池和文件系统, 它们都是原型的例子.典型的情况是,那些对象的类型被遍及一个软件系统的不同对象访问,因此需要一个全局的访问 指针,这便是众所周知的单例模式的应用.当然这只有在你确信你不再需要任何多于一个的实例的情况下. 单例模式的用意在于前一段中所关心的.通过单例模式你可以: 一.确保一个类只有一个实例被建立 二.提供了一个对对象的全局访问指针 三.在不影响单例类的客户端的情况下允许将来有多个实例 经典的单

单例模式の懒汉式和饿汉式

单例模式,是用来解决一次只能实例化一个对象的问题. 根据对象实例化的先后,有两种实现方式: 懒汉式 饿汉式 下面是在代码中有详细的说明两种实现方法 package 设计模式; /* * 单例的设计模式(饿汉式) * 1.解决的问题:使得一个类只能够创建一个对象 * 2.如何实现 * */ public class SingletonTest { public static void main(String[] args) { Singleton s1 = Singleton.getInstanc

饿汉式单例模式和懒汉式单例模式

饿汉式单例模式 /** * 饿汉式单例模式 */ package com.you.hai.model; /** * @author YouHaiDong * */ public class Singleton { //实例化 private static Singleton instance = new Singleton(); /** * 无参构造函数私有化 */ private Singleton() { } /** * 通过该方法获取实例对象 * @return */ public sta

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

单例模式 单例模式在程序设计中使用的频率非常之高,其设计的目的是为了在程序中提供唯一一个对象(保证只被构造一次),例如写入日志的log对象,windows的任务管理器实现(只能打开一个).这里主要介绍单例模式使用Java的实现(包括饿汉式及懒汉式). 实现 这里使用Log类作为例子,Log对象需要在程序中只有一个对象且只初始化一次. 饿汉式 饿汉式的单例模式理解起来是比较容易的,就是在单例类加载的时候就初始化需要单例的对象.实现也比较容易. public class Singleton{ pri

单例模式(饿汉式单例模式与懒汉式单例模式)

首先弄清楚什么是单例模式? 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案 单例模式的特点:(单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例) 1.该类只能有一个实例 2.该类只能自己创建这个唯一实例,且别人对该类无法创建实例 3.该类提供一个公开的方法public