`

对单例模式的改进

阅读更多
给出一种对单例模式改进

package boke.mode;

package boke.mode;

/**
 * 单例模式改进
 * 
 * @since jdk1.6
 * @author 毛正吉
 * @version 1.0
 * @date 2010.06.08
 * 
 */
public class Singleton {
	
	/**
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		Singleton s1 = Singleton.getInstance();
		Singleton s2 = Singleton.getInstance();
		Singleton s3 = Singleton.getInstance();
		Singleton s4 = Singleton.getInstance();
		Singleton s5 = Singleton.getInstance();

		System.out.println(s1 == s2);
		System.out.println(s2 == s3);
		System.out.println(s3 == s4);
		System.out.println(s4 == s5);
	}

	/**
	 * 私有内部类
	 * @author 毛正吉
	 *
	 */
	private static class SingletonCreate {
		private static final Singleton instance = new Singleton();
	}
	
	/**
	 * 私有构造
	 */
	private Singleton() {
		System.out.println("Singleton Constructor...");
	}

	public static final Singleton getInstance() {

		return SingletonCreate.instance;

	}
}
分享到:
评论
22 楼 mfkvfn 2010-12-20  
标题党。

单例模式就那两种。一种在一开始就创建好。另一种在调用getInstance()时缓创建(使用锁技术保证线程安全)。
21 楼 aabcc 2010-12-20  
bjzk_2010 写道
而且无偿的提供了序列化的机制,并由JVM从根本上提供保障,绝对防止多次实例化,是更简洁、高效、安全的实现单例的方式。


枚举实现singleton
1.5+ best practice
Joshua Bloch 大神说的肯定没错
20 楼 bjzk_2010 2010-12-19  
而且无偿的提供了序列化的机制,并由JVM从根本上提供保障,绝对防止多次实例化,是更简洁、高效、安全的实现单例的方式。
19 楼 bjzk_2010 2010-12-19  
大哥,您out了吧!现在单例都用枚举来实现,JVM自己初始化,避免了再次实例化和现成问题。而且性能远比自己写要实惠的多!
public enum Singleton{
    getInstance;
    //后面是单例中的属性及方法
     //现在的枚举已经是实现单例最有效最廉价的方式了!
}
18 楼 C_J 2010-11-28  
比传统的单例区别就是lazy loading了。


happenZheng 写道
这样只起到在全局上,创建该类的单个对象,但无法做到不同线程互斥访问该对象的作用。


不同线程访问单例对象,除开同步关键字和1.5的lock,我想不到什么方式了,单例本身就是全局的,没怎么看明白你的意思?能具体点吗?
17 楼 gdpglc 2010-11-27  
henry0616 写道
我觉得这种方法也有缺点,即不能将创建的实例销毁掉,再重新创建新的对象。



即然是单粒,需要用就用哇!为啥要重新创建?需要重新创建就别用单粒呗!
16 楼 happenZheng 2010-11-27  
这样只起到在全局上,创建该类的单个对象,但无法做到不同线程互斥访问该对象的作用。
15 楼 CodingMouse 2010-10-28  
见识过了,带延迟加载的单例模式,一直也习惯用这种方式实现单例。
14 楼 zxflb 2010-10-28  
楼主就是毛正吉
我好想几年钱就看过 楼主的代码

  楼主现在在哪高就啊
13 楼 chris_zley 2010-08-26  
我也以为楼主要写并发呢。。。
12 楼 lewisw 2010-08-20  
楼主应该用并发访问来展示他的效果,呵呵
11 楼 NanguoCoffee 2010-08-20  
这不可能是原创的。
10 楼 henry0616 2010-08-20  
我觉得这种方法也有缺点,即不能将创建的实例销毁掉,再重新创建新的对象。
9 楼 hardPass 2010-06-24  
slaser 写道
用Object Holder来实现Thread之间的visiblity.


是不是既能 做到 延迟加载, 又不需要在每次getInstance的时候加互斥锁 等待


关于类加载的过程,
哪位大侠详细讲解下啊

8 楼 gaojinpeng 2010-06-24  
包了一层有什么好处吗?我感觉没什么区别吧!
7 楼 popjxc 2010-06-24  
magnesium 写道

public enum Singleton{

    INSTANCE


}



Effective Java
6 楼 magnesium 2010-06-23  

public enum Singleton{

    INSTANCE


}

5 楼 rainsilence 2010-06-23  
这是延迟加载的单例模式
4 楼 weiyc_16000 2010-06-23  
keshin 写道
请参考此条目:
http://en.wikipedia.org/wiki/Initialization_on_demand_holder_idiom



这篇文章将原理阐述地非常清楚~
3 楼 slaser 2010-06-23  
用Object Holder来实现Thread之间的visiblity.

相关推荐

    Java单例模式应用研究.pdf

    双重检查锁单例模式(Doubly Checked Locking Singleton)是懒汉式单例模式的一种改进版,既实现了延迟加载,又解决了多线程安全问题,同时也减少了同步的开销。具体实现如下: ```java public class UserService { ...

    单例模式.ppt

    【单例模式】是一种常用的软件设计模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点。在软件开发中,单例模式常用于管理共享资源或者需要协调多个组件交互的场景,比如数据库连接池、日志服务等。 ...

    Java单例模式深入理解

    Java单例模式是一种设计模式,它允许...以上就是关于Java单例模式的深入理解和常见实现方式,希望对你理解单例模式有所帮助。在实际开发中,灵活运用并结合具体场景选择合适的单例模式将有助于提高代码质量和可维护性。

    JAVA单例模式的登录案例

    根据给定的信息,我们可以深入探讨Java单例模式的登录案例,并从中提炼出多个重要的知识点。 ### 单例模式概述 单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这种模式通常...

    单例模式Demo

    单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。这种模式在资源管理、缓存、线程池等场景中非常常见,因为这些场景往往需要一个唯一的对象来协调系统资源或者执行特定的任务。在...

    unity中涉及的三种单例模式

    下面将详细介绍在Unity中涉及的三种单例模式:C#经典单例、Unity内置单例以及一种线程安全的改进版单例。 1. C#经典单例: 这是最常见的单例实现方式,通常通过私有构造函数和一个静态方法来保证只有一个实例。在...

    ava常用设计模式-单例模式

    ava常用设计模式-单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,有以下特点: 1. 单例类只能有一个实例。 2. 单例类必须自己创建自己的唯一实例。 3. 单例类必须给所有其他对象提供这一...

    java设计模式----单例模式

    总的来说,单例模式的设计旨在提供对唯一实例的受控访问,饿汉模式和懒汉模式分别代表了初始化策略的不同选择,开发者需要根据具体需求平衡初始化时机和线程安全的需求。在实际开发中,还可以使用枚举类型的单例,这...

    PHP单例设计模式,连接多数据库源码

    2: 缩小命名空间 单例模式是对全局变量的一种改进,它避免了那些存储唯一实例的全局变量污染命名空间. 3: 允许对操作和表示的精华 单例类可以有子类. 而且用这个扩展类的实例来配置一个应用是很容易的,你可以用你所...

    C++中的单例模式

    在C++编程中,单例模式是一种常用的设计模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点,使得所有程序模块都能共享这个唯一的实例。单例模式在许多场景下都非常实用,例如日志记录、GUI应用的...

    单例模式七种写法_转

    在软件工程领域中,单例模式是一种广泛使用的创建型设计模式,其目的是确保一个类只有一个实例,并提供一个全局访问点。单例模式在多线程环境下使用时,若不采取适当的同步措施,可能会导致创建多个实例,破坏模式的...

    JAVA单例模式(三种)

    在这三种单例模式中,饿汉式适用于对性能要求较高且实例创建成本不高的场景;懒汉式适用于对延迟初始化有需求的情况,但需注意线程安全问题;而DCL式则在性能和线程安全之间取得了较好的平衡,是实际开发中最常用的...

    java设计模式之单例模式

    Java设计模式中的单例模式是一种常用的创建型设计模式,它保证了类只有一个实例,并提供一个全局访问点。这种模式在很多场景下非常有用,比如控制共享资源、管理配置信息等。接下来,我们将深入探讨8种不同的单例...

    17-Java单例模式的学习笔记1

    Java 单例模式是一种设计模式,它用于保证一个类只有一个实例,并提供全局访问点。这种模式在需要控制类的实例化次数,或者当类的创建是昂贵的操作时非常有用。以下是对不同单例实现方式的详细说明: 1. **懒汉式**...

    Android编程设计模式之单例模式实例详解

    懒汉模式是一种改进的单例模式实现方式,它可以解决饿汉模式的线程不安全问题。但是,它也有一个缺点,即每次调用getInstance方法都会进行同步,造成不必要的同步开销。 ```java public class Singleton { private...

    java设计模式——单例模式

    【Java设计模式——单例模式】 单例模式是一种常见的软件设计模式,它的核心思想是确保在应用程序的整个生命周期中,某个类只有一个实例存在。这种模式主要用于控制类的实例化过程,减少系统资源的消耗,提高系统...

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

    下面展示了一个使用`std::unique_ptr`改进的单例模式实现: ```cpp #include class CSingleton { public: static CSingleton& GetInstance() { static std::unique_ptr<CSingleton> instance{new CSingleton{}}...

    JavaScript的单例模式 (singleton in Javascript)

    ### JavaScript的单例模式详解 ...通过对单例模式的深入理解,可以更有效地管理和控制JavaScript应用中的对象实例。通过上述示例可以看到,单例模式不仅可以简化代码结构,还可以提高程序的可维护性和扩展性。

    按需释放单例模型的改进版例子

    本资源是《C++中的单例模式及按需释放模型》系列博文的改进例子,文章地址为http://blog.csdn.net/gogogo/article/details/7041907,其中提到了如何在C++正确使用单例模式,并讲解了使用辅助类实现可以按需释放的...

Global site tag (gtag.js) - Google Analytics