设计模式中饿汉式单例类和懒汉式单例类

单例模式的特点为:

*单例类只有一个实例。

*单例类必须自己创建自己的唯一实例。

*单例类必须给所有其他对象提供这一实例。

饿汉式单例类:

而饿汉式单例类则在java语言中是最为简单的单例类,这是一个描述饿汉式单例类的类图的实现。

此类图中,此类已经将自己实例化。

源码为:

package singleton;

public class EagerSingleton {
	private static EagerSingleton instance=new EagerSingleton();
	/**
	 * 私有的默认构造子
	 * @return
	 */
	public EagerSingleton(){}
	/**
	 * 静态工厂方法
	 * @return
	 */
	public static EagerSingleton getInstance(){
		return instance;
	}
}

可以看出,在这个类被加载时,静态变量instance已经实例化,此时类的私有构造方法就会被调用,这时,

单例类的唯一实例对象就被创建出来。

在单例类中一个最重要的特点就是类的构造方法是私有的,因此,该类无法被继承。

懒汉式单例类:

与饿汉式单例类相同之处是类的构造方法是私有的,与饿汉式单例类不同的是,懒汉式单例类,在第一次被引用时将自己实例化,

如下图所示,uml类图中给出了一个典型的懒汉式单例类实现。

懒汉式的源码为:

package singleton;

public class LazySingleton {
	private static LazySingleton instance=null;
	/**
	 * 私有的构造函数,保证外界无法实例化
	 */
	private LazySingleton(){}

	/**
	 * 静态工厂方法,返回此类的唯一实例
	 */
	public synchronized static LazySingleton getInstance(){
		if(instance==null){
			instance=new LazySingleton();
		}
		return instance;
	}

}

饿汉式单例类和懒汉式单例类,饿汉式单例类在自己被加载时就将自己实例化,即便加载器是静态的,

在饿汉式单例类被加载时仍会将自己实例化,单从资源利用效率角度来讲,这个比懒汉式单例类稍差些。

但从速度和反应时间角度来讲,则比懒汉式单例类稍好些,然而,懒汉式单例类在实例化时,必须要处理好

在多个线程同时首次引用此类时的访问限制问题,特别是当单例类作为资源控制器在实例化必然涉及资源初始化,

而资源初始化可能会很费时间,这意味着出现多线程同时引用此类的几率变得较大。

时间: 2024-08-25 05:46:08

设计模式中饿汉式单例类和懒汉式单例类的相关文章

单例设计模式之饿汉式(静态常量)

package com.waibizi; /** * 单例设计模式之饿汉式(静态常量) * 步骤 * 1.构造器私有化(防止new) * 2.类的内部创建对象 * 3.向外暴露一个静态的公共方法 getInstance * 4.代码实现 * @author 歪鼻子 * * *优点:这种写法比较简单,类加载的时候就完成了实例化.避免了线程同步问题 *缺点:类装载的时候就完成了实例化,如果从开始到至终都没使用过这个类,势必会造成资源的浪费 *结论:这种单例模式是可用的,可能会导致浪费(调用getIn

单例设计模式之饿汉式(静态代码块)

package com.waibizi.demo02; /** * 单例设计模式之饿汉式(静态代码块) * 这种方式与饿汉式静态常量的方式是类似的,类装载的时候也有直接创建对象 * @author 歪鼻子 * */ @SuppressWarnings("all") public class Singleton_Pattern { public static void main(String[] args) { // TODO Auto-generated method stub } }

单例设计模式之饿汉式与懒汉式

/* 设计模式:对问题行之有效的解决方式.其实它是一种思想. 1,单例设计模式. 解决的问题:就是可以保证一个类在内存中的对象唯一性. 必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性. 如何保证对象唯一性呢? 1,不允许其他程序用new创建该类对象. 2,在该类创建一个本类实例. 3,对外提供一个方法让其他程序可以获取该对象. 步骤: 1,私有化该类构造函数. 2,通过new在本类中创建一个本类对象. 3,定义一个公有的方法,将创建的对象返回. */ //饿汉式 class

java===单类设计模式之饿汉式与懒汉式

package cn.china; public class Single { public static void main(String[]args){ // S singles=S.getInstance(); // S singless=S.getInstance(); // System.out.println(singles==singless); Test tt=Test.getInstance(); Test ttt=Test.getInstance(); tt.setNum(1

Java---15---单例设计模式:---饿汉式和懒汉式

概念: 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.   单例模式有以下特点: 1.单例类只能有一个实例 2.单例类必须自己给自己创建自己的唯一实例 3.单例类必须给所有其他对象提供这一实例 饿汉式: /*饿汉式*/ class Single { private static final Single s = new Single(); private Single () {} public static Single getInstance() { return s

字符类型和控制语句、函数、懒汉、饿汉式

1. 小数默认为double类型. 2. 逻辑运算符:&&,||,!,&,|,^ 3. 位运算:      & ,|,^,~,<<,>>,>>> a^b^b = a(得到本身) 位运算是最快的运算方法 两个数值的调换位置的方法: 1.设置一个变量 int a = 1,b  = 2,c; c = a; a = b; b = c; 2.直接通过相加减我完成 int a  = 1,b = 2; a = a + b; b = a - b;

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

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

单件模式详解:懒汉式与饿汉式

class Instance{} //懒汉式 class LSingle{ private static  Instance _instance = null; private LSingle(){} public static Instance getInstance(){ if(_instance==null){ synchronized(LSingle.class){ _instance = new Instance(); } } return _instance; } } //饿汉式 c

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

单件模式用途:单件模式属于工厂模式的特例,只是它不需要输入参数并且始终返回同一对象的引用.单件模式能够保证某一类型对象在系统中的唯一性,即某类在系统中只有一个实例.它的用途十分广泛,打个比方,我们开发了一个简单的留言板,用户的每一次留言都要将留言信息写入到数据库中,最直观的方法是没次写入都建立一个数据库的链接.这是个简单的方法,在不考虑并发的时候这也是个不错的选择.但实际上,一个网站是并发的,并且有可能是存在大量并发操作的.如果我们对每次写入都创建一个数据库连接,那么很容易的系统会出现瓶颈,系统