`
gengu
  • 浏览: 86655 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

java 模式之单例模式

阅读更多

 

开始研究java模式,有些东西还理解的不是很透彻

 

把他们记录下来加深理解,并且跟广大技术爱好者们共同探讨

 

单例模式,就是保证在堆中只创建某一个类的一个实例,单例模式有很多应用,比如说hibernate中的SessionFactory,比如在Spring中默认创建的类的实例都应该是单例模式的。

 

我觉得他是模式中最简单的之一了

 

有两种实现方式

1:

package com.gengu.单例;

/**
 * 单例模式的一种实现形式
 * */
public class DanLi1 {

	private static  DanLi1 danLi1=null;
	
	/** 单例模式不能有公开的构造方法 */
	private DanLi1(){}
	
	/** 单例模式有一个返回对象*/
	public static DanLi1 getDanLi1(){
		if(danLi1==null){
			danLi1 = new DanLi1();
		}
		return danLi1;	
	}
}
 
package com.gengu.单例;

/**
 * 单例模式的一种实现形式
 * */
public class DanLi2 {

	private static  DanLi2 danLi2 = new DanLi2();
	
	/** 单例模式不能有公开的构造方法 */
	private DanLi2(){}
	
	/** 单例模式有一个返回对象*/
	public static DanLi2 getDanLi1(){
		return danLi2;
	}
}

 第二种方式更加线程安全,因为如果同时有两个线程都第一次访问他,那么可能在一个线程正在创建的时候另一个线程也在创建,所以建议第二种。

 

还有如果用用类加载器,加载同一个字节码文件,那么得到的Class类型的实例也是单例,请看代码

package com.gengu.单例;

public class test1 {

	public static void main(String[] args) throws InstantiationException, IllegalAccessException {
		Class clazz1;
		Class clazz2;
		try {
			 //加载类文件
			 clazz1= Class.forName("java.lang.String");
			 clazz2= Class.forName("java.lang.String");
			 
			 //创建实例
			 String str1=(String)clazz1.newInstance();
			 String str2=(String)clazz1.newInstance();
			 
			 System.out.println(str2.getClass());
			 System.out.println("用不同的加载器加载同一个类字节码文件是单例的clazz1==clazz2:"+(clazz1==clazz2));
			 System.out.println("但是用同一个CLass创建的两个类不是单例的str1==str2:"+(str1==str2));
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}
}

 class java.lang.String
用不同的加载器加载同一个类字节码文件是单例的clazz1==clazz2:true
但是用同一个CLass创建的两个类不是单例的str1==str2:false

 

以上就是今天对单例模式的一点理解

分享到:
评论

相关推荐

    java模式之单例模式

    java模式之单例模式: 单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。 特点: 1,一个类只能有一个实例 2,自己创建这个实例 3,整个系统都要使用这个实例 例: 在下面的对象图...

    Java SE程序 单例模式

    Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式...

    java模式之单例模式.doc

    单例模式在Java中主要有两种实现方式: 1. **饿汉式**(Eager Initialization):在类加载时就创建了实例,确保任何时候获取到的都是同一个实例。代码示例如下: ```java public class Singleton { private ...

    java单例模式实例

    在Java中,有多种实现单例模式的方法,每种都有其特点和适用场景。接下来,我们将深入探讨这些实现方式。 首先,我们来看**懒汉式(Lazy Initialization)**。这种实现方式是在类被首次请求时才创建单例对象,延迟...

    设计模式之单例模式(结合工厂模式)

    在Java等面向对象编程语言中,单例模式常用于管理共享资源,如数据库连接池、线程池或者配置文件等。结合工厂模式,可以进一步优化单例的创建过程,提高代码的可读性和可维护性。 单例模式的核心在于控制类的实例化...

    Java设计模式之单例模式讲解

    入名所示,该文件为最详细的Java单例模式讲解并附有讲解代码。主要讲了单例模式的几种方法,懒汉模式、饿汉模式、静态内部类模式。着重讲解了懒汉模式下怎么实现线程安全。饿汉模式和静态内部类模式如何设置能够避免...

    Java实现多种单例模式

    在Java编程中,单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这种模式在需要频繁创建和销毁对象的场景中尤其有用,因为它可以节省系统资源并确保对象间的协调一致。以下是...

    Java设计模式之单例模式

    目录 单例模式的概念 单例模式的要点 单例模式类图 单例模式归类 单例模式的应用场景 单例模式解决的问题 单例模式的实现方式 单例模式实现方式对比 单例模式的概念 单例模式,顾名思义就是只有一个实例,并且由它...

    java设计模式之单例模式.zip

    在Java中实现单例模式有多种方法: 1. **饿汉式(静态常量)**:在类加载时就完成了初始化,所以没有线程安全问题,但这种实现方式无法实现延迟加载。 ```java public class Singleton { private static final ...

    设计模式单例模式和工厂模式综合应用

    "设计模式单例模式和工厂模式综合应用"的主题聚焦于两种常用的设计模式:单例模式和工厂模式,并探讨它们如何协同工作来实现高效、灵活的代码结构。这个主题尤其适用于Java编程语言,因为Java的面向对象特性使得设计...

    JAVA设计模式之单例模式(完整版)1[定义].pdf

    JAVA设计模式之单例模式(完整版)1[定义].pdf

    Java设计模式之单例模式的七种写法

    Java设计模式之单例模式的七种写法 单例模式是一种常见的设计模式,它确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机的驱动程序对象常...

    Java中懒汉单例设计模式线程安全测试

    Java中懒汉单例设计模式线程安全测试,单例设计模式的测试

    JAVA设计模式之单例模式

    单例模式是软件设计模式中的一种经典模式,它在Java编程中被广泛使用,尤其是在需要控制实例化过程,或者确保某类只有一个实例时。本文将深入探讨Java中的单例模式,帮助你理解其原理和应用。 单例模式的核心思想是...

    java中的单例模式

    Java中的单例模式是一种设计模式,它用于保证一个类只有一个实例,并提供一个全局访问点。这种模式在系统中需要控制实例数量,特别是当这个实例需要频繁地被多个对象共享时非常有用,例如数据库连接池、线程池或者...

    设计模式之单例模式源码demo

    单例模式是软件设计模式中的经典模式之一,其主要目的是控制类的实例化过程,确保在应用程序的整个生命周期中,某个类只有一个实例存在。这样的设计通常适用于那些需要频繁创建和销毁,但资源消耗较大的对象,如...

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

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

    java 设计模式 mvc模式 单例模式 代理 工厂 简单工厂

    例如,MVC模式在Web应用开发中非常常见,单例模式常用于日志服务、数据库连接池等需要全局唯一的场景,代理模式可以用于数据访问控制,工厂模式则用于解耦对象的创建和使用。通过学习和实践这些模式,开发者可以更好...

    实用Java的单例模式,实用于Java学习者

    实用Java的单例模式,实用于Java学习者 单例模式 单例模式

    java 设计模式 单例模式

    //单例模式,始终只产生一个对象 /*public class SingleTest { public static void main(String[] args) { SingleTon singleTon1=SingleTon.getInstance(); SingleTon singleTon2=SingleTon.getInstance(); ...

Global site tag (gtag.js) - Google Analytics