`

对单例模式的改进

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

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.

相关推荐

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

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

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

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

    php实现设计模式中的单例模式详解

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

    学习php设计模式 php实现单例模式(singleton)

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

    java 单例设计模式

    详细介绍了java中单例设计模式各种方式,已经改进方案

    设计模式课程设计---使用6个不同的设计模式完成绘图系统(java)

    运用到的设计模式有备忘录模式,迭代器模式,简单工厂模式,状态模式,模版方法模式,单例模式。 资源包含项目文件(eclipse)以及系统说明(docx文件),系统说明中说明了为什么要使用该模式,使用该模式有什么好处...

    设计模式之单例模式和建造者模式摘录

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

    用观察者模式和非观察者模式设计一个交通信号灯调度系统

    用观察者模式设计一个交通信号灯调度系统,...最近看了一些Java中的设计模式,比如最简单的单例模式,抽象工厂模式,观察者模式等。在学习了这些设计模式之后,我又对之前写过的一些程序做了改进,本文贴一个交通信号灯的系统

    Delphi模式编程第一分卷

    10.3.1 使用桥接模式改进数据持久层的健壮性 10.3.2 基于桥接模式的一个数据视图程序 10.3.3 范例小结 第11章 合成模式(Composite) 2 11.1 模式解说 11.2 结构和用法 11.2.1 模式结构 11.2.2 代码模板 ...

    Delphi模式编程第二分卷

    10.3.1 使用桥接模式改进数据持久层的健壮性 10.3.2 基于桥接模式的一个数据视图程序 10.3.3 范例小结 第11章 合成模式(Composite) 2 11.1 模式解说 11.2 结构和用法 11.2.1 模式结构 11.2.2 代码...

    design-patterns:设计模式

    单例模式(单例模式) 结构型模式 适配器模式 改进模式(bridge pattern) 组合模式 装饰器模式 门面模式 享元模式(flyweight pattern) 代理模式(代理模式) 行为模式(行为模式) 责任链模式(责任链模式) 命令...

    design-pattern

    单例模式 抽象工厂模式 建造者模式 原型模式 结构型模式7种 适配器模式 改进模式 装饰模式 组合模式 外观模式 享元模式 代理模式 行为型模式11种 模版方法模式 命令模式 迭代器模式 观察者模式 中介者模式 备注模式 ...

    PhpPatterns:php设计模式

    单例模式 :check_mark_button: 工厂模式 :check_mark_button: 抽象工厂模式 :check_mark_button: 简单工厂模式 :check_mark_button: 静态工厂模式 :check_mark_button: 原型模式 建造者模式 结构型模式实例 改进模式...

    JAVA单例模式源码-JyNI:使Jython能够加载本机CPython扩展

    JAVA例单模式源码JyNI – Jython 本机接口 如果还没有完成,请务必访问我们的项目主页。 目录 1.什么是JyNI? Jython 当前阻碍其更广泛采用的一个问题是它不支持为 CPython 编写的本机扩展,如 NumPy 和 SciPy。 ...

    C-background-development-interview-experience:C ++后台开发面试经验

    数据库(1)MongoDB(2)MongoDB高级(3)mysql(4)mysql高级(5)Redis5,设计模式(1)设计模式概述(2)创造型模式单例模式工厂模式建造者模式原型模式(3)结构型模式代理模式装饰模式适配器模式改进模式组合...

    二十三种设计模式【PDF版】

    设计模式之 Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之 Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new 一样频繁. ...

    GreenDao使用例子-Android工程中如何便捷使用

    GreenDao的官方example中进行操作需要新建一个session,然而不知道如何释放这个session是件很头痛的事情,所以使用单例模式,来保存这个session以便重复使用是极好的,资源是对官方example的一个改进。

    pos-system:重新提交代码并改进它

    [题目练习需求]涉及的知识点多态策略模式工厂模式 & 单例模式组合模式装饰者模式商店里进行购物结算时会使用收银机(POS)系统,这台收银机会在结算时根据客户的购物车(Cart)中的商品(Item)和商店正在进行的优惠...

    网络包捕获 SharpPcap 2.2.0

    SharpPcap 是一个.NET 环境下的网络包捕获框架,基于著名的 pcap/WinPcap 库开发。提供了捕获、注入、分析和构建的功能,适用于 C# 和 VB.NET 开发语言。...4. 通过使用单例模式来提升 PcapDeviceList 的性能

Global site tag (gtag.js) - Google Analytics