java Singleton模式

Java Singleton 模式用来保证在运行的应用程序中,一个Class只是实例化一次,也就是只有一个相应的对象存在。在 web 程序中我们会用一个核心的分配功能的Servlet程序,在这里我们就可以运用这种设计模式了。
一般Singleton模式通常有几种种形式:
第一种形式:
定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}

//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();

//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
第二种形式:
public class Singleton {
private static Singleton instance = null;

public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}

其他形式:
定义一个类,它的构造函数为private的,所有方法为static的。
一般认为第一种形式要更加安全些

时间: 2016-04-10

java Singleton模式的相关文章

singleton模式

或许最简单的设计范式就是"单子"(Singleton),它能提供对象的一个(而且只有一个)实例.单子在Java库中得到了应用,但下面这个例子显得更直接一些:   //: SingletonPattern.java // The Singleton design pattern: you can // never instantiate more than one. package c16; // Since this isn't inherited from a Cloneable /

Design Pattern: Singleton 模式

一句话概括:保证一个类仅有一个实例,并提供一个访问它的全局访问点. Singleton的英文意义是独身,也就是只有一个人,应用在物件导向语言上,通常翻译作单例:单一个实例(Instance).  很多时候,您会需要Singleton模式,例如印表机管理,您希望程式中只能有一个Print Spooler,以避免两个列印动作同时输入至印表机中:例如资料库管理,因为建立连接(Connection)物件会耗用资源,您希望程式中只能有一个 连接物件,所有其它的程式都透过这个物件来连接资料库,以避免连接物件

C++/CLI中实现singleton模式

双重检测锁(Double-Checked Locking)实现的Singleton模式在多线程应用中有相当的价值.在ACE的实现中就大量使用ACE_Singleton模板类将普通类转换成具有Singleton行为的类.这种方式很好地消除了一些重复代码臭味,而且,优化后的性能较标准互斥版本提高15倍.最近在用C++/CLI做一些工作,Singleton不可避免地需要用到,于是我又制造了一次车轮. 1 #pragma once2 3 /** \class sidle::Singleton4 \bri

设计模式的解析和实现(C++)之五-Singleton模式

作用:保证一个类仅有一个实例,并提供一个访问它的全局访问点. UML结构图: 解析: Singleton模式其实是对全局静态变量的一个取代策略,上面提到的Singleton模式的两个作用在C++中是通过如下的机制实现的:1)仅有一个实例,提供一个类的静态成员变量,大家知道类的静态成员变量对于一个类的所有对象而言是惟一的 2)提供一个访问它的全局访问点,也就是提供对应的访问这个静态成员变量的静态成员函数,对类的所有对象而言也是惟一的.在C++中,可以直接使用类域进行访问而不必初始化一个类的对象.

设计模式学习笔记(九)—Singleton模式

<设计模式>一书对Singleton模式是这样描述的: 保证一个类只有一个实例,并提供一个访问它的全局访问点. 这个模式比较简单,下面给出一个例子: public class Singleton { private static Singleton instance; private Singleton(){ } public static Singleton getInstance(){ if(instance==null) instance=new Singleton(); return

用Delphi实现Singleton模式

单例模式用于限制进程中只有一个某个类的对象,本例的Singleton是一个线程实例,在每一个时钟到达时检测是否到达某个时刻(本例的时刻存于Ini文件中),如果到达则产生一个线程,但是如果在这个线程完成其任务前又到达一个时钟,则有可能会产生多个线程执行任务,以致出现混乱,所以考虑使用Singleton模式解决这个问题(当然还有其他解决方案,但本例使用的是Singleton). 核心代码如下: //timer单元procedure TService1.Timer_mainTimer(Sender:

Python使用metaclass实现Singleton模式的方法

  本文实例讲述了Python使用metaclass实现Singleton模式的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 class Singleton(type): def __call__(cls, *args, **kwargs): print "Singleton call" if not hasattr(cls, 'instance'): cls.

多线程-用c++实现singleton模式。

问题描述 用c++实现singleton模式. 作业:用c++实现singleton模式.具体的该如何下手啊?关于C++多线程的书籍知道的比较好的帮忙推荐一下了.谢谢 解决方案 C++多线程的书籍推荐台湾侯捷的<Win32 多绪程式设计> 解决方案二: class singleton { private: singleton() { } //封闭构造函数 private: static singleton * _instance; // 唯一实例 public: static singleto

轻松掌握Java代理模式_java

和大家一起聊一聊java代理模式 1.静态代理 1.1静态代理的代理类和和被代理的类都要维护一个共同的接口.  public interface IUserDao { void save(); } 1.2被代理的类,目标对象  public class UserDao implements IUserDao{ @Override public void save() { System.out.println("-----已经保存数据!!!------"); } } 1.3代理对象  p