`

Java中单例模式(Singleton)笔记__自用

    博客分类:
  • Java
阅读更多


注意三种单例模式的实现互相独立。因为偷懒把他们写在同一个类里了。

package HomeWork110306;

/**
 * 单例模式:保证一个java的类只有一个实例
 *   可以通过将构造方法声明成私有的,在类内部创建实例
 *   对外提供一个公用方法来获取这个实例
 *   饱汉模式:一般认为饱汉模式安全。每次申请一次内存,宁撑死不挨饿
 *   饥汉模式:注意饥汉模式下的公用方法必须是线程同步的,原因????
 *   其他模式:定义一个类,构造方法为private,所有方法为static的
 * @author wybin
 */
public class Singleton {
	/**1.饱汉模式
	 * 每次都要生成一次对象,所以饱了。这样总的类对象不是多个了吗?
	 * 是指每次调用这个类时都要new一次吗?可是内存不是只有一份吗?
	 */
	private Singleton(){//构造方法是私有的		
	}
	//实例化代码放在静态代码块里可以提高程序执行效率,但可能更占空间
	private final static Singleton instance = new Singleton();
	//提供公用方法,用于获取类内部的类实例
	public static Singleton getInstance(){
		return instance;
	}
	
	
	/**2.饥汉模式,注意其getInstance方法是synchronized的
	 * 使用getInstance判断,当实例为空时才生成
	 * 不用每次生成对象,第一次使用生成实例
	 * 即刚开始类实例对象为null,还未申请内存。在getInstance里针对类实例进行判断
	 * 为空,即饥饿状态,需要创建后返回,否则直接返回
	 * @author wybin
	 */
	private Singleton(){
	}
	private static instance = null;//先声明一个类本身实例成员。初始化为空。先不申请内存
	public static synchronized Singleton getInstance(){
		if(instance == null) instance = new Singleton();
		return instance;
	}
	
	/**3.其他模式(自己猜的)
	 * 构造方法为private
	 * 其他方法全部为static
	 */
	private Singleton(){
	}
	private static instance = null;
	private static Singleton getInstance(){
		if(instance == null) instance = new Singleton();
		return instance;	  
	}
	
}


分享到:
评论
1 楼 随意而生 2015-03-22  
我知道一个是用lock加锁,在加锁前后都判断一次是否已经创建了实例。这样比起楼主的同步方法,效率应该更好了吧

相关推荐

    JAVA中单例模式的几种实现方式.doc

    ### JAVA中单例模式的几种实现方式 #### 1. 线程非安全的基本实现方式 单例模式是设计模式中的一种常用形式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。在Java中,单例模式可以通过多种方式来...

    Java多线程编程环境中单例模式的实现

    ### Java多线程编程环境中单例模式的实现 #### 概述 单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在Java中,单例模式的应用非常广泛,特别是在资源管理、日志记录、...

    java单例模式实例

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

    浅谈Java中单例设计模式之构造方法私有化.pdf

    "浅谈Java中单例设计模式之构造方法私有化" 单例设计模式是 Java 中一种常用的设计模式,核心思想是将类的构造方法私有化,以控制实例化对象的产生。这种模式可以确保在程序中只有一个实例化对象存在,这对控制对象...

    加速器中单带电粒子模拟库_C++_C_下载.zip

    标题中的“加速器中单带电粒子模拟库_C++_C_下载.zip”指的是一个用于模拟加速器中单个带电粒子运动的软件库,它支持C++和C两种编程语言。这个库可能是科研和工程领域中用于粒子加速器设计、优化和分析的重要工具。 ...

    java 中单例模式饿汉式与懒汉式的对比

    java 中单例模式饿汉式与懒汉式的对比 java 中单例模式是保证一个类仅有一个实例,并提供一个访问它的全局访问点的设计模式。单例模式有以下特点:单例类只能有一个实例,单例类必须自己自己创建自己的唯一实例,...

    Java中单例模式详解

    在Java中,实现单例模式主要有三种方式:懒汉式、饿汉式和登记式。 **懒汉式单例**: 懒汉式单例的特点是在类第一次被使用时才创建实例,延迟加载,以节省资源。然而,非线程安全的懒汉式单例在多线程环境下可能...

    上市公司个股买卖不平衡指标表(日)20041101-20241031主动性买入次数卖出成交量成交金额笔数特大单中单小单行业名称等 数据来源:基于上市公司年报及公告数据整理,超5GB数据的网盘链接

    买入成交笔数_大单 卖出成交笔数_大单 买入次数_中单 卖出次数_中单 买入成交量_中单 卖出成交量_中单 买入成交金额_中单 卖出成交金额_中单 买入成交笔数_中单 卖出成交笔数_中单 买入次数_小单 卖出次数_小单 买入...

    Kotlin中单例模式和Java的对比浅析

    Kotlin 中单例模式和 Java 的对比浅析 Kotlin 中单例模式是指在应用程序中确保某个类仅有一个实例,并提供一个全局访问点的机制。单例模式是一种常用的设计模式,在 Java 和 Kotlin 中都有多种实现方式。下面我们将...

    基于php设计模式中单例模式的应用分析

    单例模式是软件设计模式中的一种,它的核心思想是确保某个类在整个应用程序中只有一个实例存在。在PHP中,单例模式常用于管理共享资源,如数据库连接或全局配置,以优化性能并提供统一的访问入口。 单例模式的实现...

    Java中单例模式的7种写法

    Java中的单例模式是一种设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。下面将详细介绍7种不同的Java单例模式实现方式: 1. **懒汉式(非线程安全)**: 这是最简单的实现,延迟初始化,但在多线程...

    C++设计模式课件12_Singleton_单件模式.pdf

    通过对C++中单件模式的实现方式以及应用场景的学习,可以帮助开发者更好地理解和运用这一模式,从而提高代码的质量和效率。同时,需要注意的是,在实际开发中要根据具体情况选择合适的实现方式,合理运用单件模式,...

    c++中单例模式对象的释放控制

    在C++编程领域,设计模式是解决特定问题的模板,其中单例模式(Singleton Pattern)是一种常用的创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。然而,在C++中实现单例模式时,如何正确管理这个...

    Python中单例模式总结

    在Python编程中,单例模式是一种设计模式,它限制了类的实例化过程,确保一个类只有一个实例,并提供全局访问点。这种模式在需要频繁实例化然后销毁的对象,或者创建对象需要消耗大量资源的场景下非常有用,因为它...

    基于Python中单例模式的几种实现方式及优化详解

    ### 基于Python中单例模式的几种实现方式及优化详解 #### 一、单例模式概述 单例模式(Singleton Pattern)是面向对象设计模式中的一种,其主要目标是在整个应用程序中确保一个类只有一个实例,并提供一个全局访问...

    C++、MFC源代码Singleton_demo

    总结来说,这个项目提供了一个学习和实践C++和MFC中单例模式的实例,通过对"说明.htm"的学习和"代码中国.txt"的阅读,可以深入理解单例模式的原理及其在实际项目中的应用。同时,"C++、MFC源代码Singleton_demo"目录...

    深入解析Java的设计模式编程中单例模式的使用

    在Java中,实现单例模式通常有两种方式:饿汉式单例和懒汉式单例。 **饿汉式单例**: 饿汉式单例在类加载时就完成了初始化,因此类加载时间较长,但获取实例的速度非常快,且线程安全。代码如下: ```java public ...

    Java中单表和多表级联的增删改查

    "Java中单表和多表级联的增删改查"这个主题涵盖了基础的数据库操作以及更复杂的关联查询技术。以下是对这些知识点的详细解释: 1. **单表的增删改查(CRUD)**: - **Create(创建)**: 在Java中,通常使用JDBC...

Global site tag (gtag.js) - Google Analytics