如何写一个便捷的单例形式 (如何写一个便利店名字)
本文目录导航:
如何写一个便捷的单例形式?
便捷的单例形式如下
[java]view plaincopyprint?
public class Singleton{
private static Singleton unique Instance=null;
private Singleton(){
//Exists only to defeat instantiation.
public static Singleton getInstance(){
if(unique Instance==null){
unique Instance=new Singleton();
return unique Instance;
//Other methods...
单例形式确保某个类只要一个实例,而且自行实例化并向整个系统提供这个实例。
在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。
这些运行都或多或少具备资源治理器的配置。
每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以防止两个打印作业同时输入到打印机中。
每台计算机可以有若干通讯端口,系统应当集中治理这些通讯端口,以防止一个通讯端口同时被两个恳求同时调用。
总之,选用单例形式就是为了防止不分歧形态,防止政出多头。
裁减资料
一、单例形式有以下特点:
1、单例类只能有一个实例。
2、单例类必定自己创立自己的独一实例。
3、单例类必定给一切其余对象提供这一实例。
二、单例形式分三种:懒汉式单例、饿汉式单例、注销式单例三种。
1.饿汉式单例类
[java]view plaincopyprint?
//饿汉式单例类.在类初始化时,曾经自行实例化
public class Singleton1{
//私有的自动结构子
private Singleton1(){}
//曾经自行实例化
private static final Singleton1 single=new Singleton1();
//静态工厂方法
public static Singleton1 getInstance(){
return single;
2.懒汉式单例类
[java]view plaincopyprint?
//懒汉式单例类.在第一次性调用的时刻实例化
public class Singleton2{
//私有的自动结构子
private Singleton2(){}
//留意,这里没有final
private static Singleton2 single=null;
//静态工厂方法
public synchronized static Singleton2 getInstance(){
if(single==null){
single=new Singleton2();
return single;
3.注销式单例类
[java]view plaincopyprint?
//注销式单例类.
//相似Spring外面的方法,将类名注册,下次从外面间接失掉。
public class Singleton3{
private static Map<String,Singleton3>map=new HashMap<String,Singleton3>();
Singleton3 single=new Singleton3();
(()(),single);
//包全的自动结构子
protected Singleton3(){}
//静态工厂方法,返还此类独一的实例
public static Singleton3 getInstance(Stringname){
if(name==null){
(name==null+--->name=+name);
if((name)==null){
(name,(Singleton3)(name)());
}catch(InstantiationExceptione){
}catch(IllegalAccessExceptione){
}catch(ClassNotFoundExceptione){
//一个表示性的商业方法
public String about(){
returnHello,IamRegSingleton.;
public static void main(String[]args){
Singleton3 single3=(null);
参考资料:网络百科——java单例形式
如何在Java中成功单例形式?
单例形式大抵有五种写法,区分为懒汉,恶汉,静态外部类,枚举和双重校验锁。
1、懒汉写法,罕用写法
如何在java中成功singleton形式
单例形式是设计形式中的一种,重要目标是确保一个类只要一个实例,并提供一个全局访问点。
在Java中,成功单例形式的方法有五种:懒汉式、饿汉式、静态外部类、枚举和双重审核锁定。
懒汉式是经常使用最宽泛的一种成功形式。
它经过在类外部定义一个静态私有变量,并在类的外部方法中启动实例的初始化。
现在次调用getInstance方法时,会创立实例并前往。
懒汉式的成功如下:class LazySingleton { private static LazySingleton singleton; private LazySingleton() {} public static LazySingleton getInstance() { if (singleton == null) { singleton = new LazySingleton(); } return singleton; }}饿汉式则是在类加载时即创立实例,这种形式保障了线程安保,然而或者形成资源糜费,由于类加载时实例就曾经被创立了。
饿汉式的成功如下:class HungrySingleton { private static HungrySingleton singleton = new HungrySingleton(); private HungrySingleton() {} public static HungrySingleton getInstance() { return singleton; }}静态外部类的成功则是在第一次性经常使用时才加载外部类,从而成功提前加载。
这种形式既能保障线程安保,又不会在类加载时就创立实例。
静态外部类的成功如下:class InternalSingleton { private static class SingletonHolder { private final static InternalSingleton INSTANCE = new InternalSingleton(); } private InternalSingleton() {} public static InternalSingleton getInstance() { return ; }}枚举成功则经过枚举类型来保障明例的独一性,并且可以防止反序列化从新创立新的对象。
枚举成功如下:enum EnumSingleton { INSTANCE; public void doSomeThing() { // do something }}最后一种是双重审核锁定,只管在某些状况下可以提高性能,但在Java的以后内存模型中,这种形式是有效的。
双重审核锁定的成功如下:class LockSingleton { private volatile static LockSingleton singleton; private LockSingleton() {} public static LockSingleton getInstance() { if (singleton == null) { synchronized () { if (singleton == null) { singleton = new LockSingleton(); } } } return singleton; }}