单例形式这个要怎样了解 java (单例有几种形式)

单例形式这个要怎样了解 java (单例有几种形式)

本文目录导航:

java 单例形式这个要怎样了解?

单例形式(Singleton Pattern)是 Java 中最便捷的设计形式之一。

这种类型的设计形式属于创立型形式,它提供了一种创立对象的最佳方式。

这种形式触及到一个繁多的类,该类担任创立自己的对象,同时确保只要单个对象被创立。

这个类提供了一种访问其惟一的对象的方式,可以间接访问,不须要实例化该类的对象。

留意:1、单例类只能有一个实例。

2、单例类必定自己创立自己的惟一实例。

3、单例类必定给一切其余对象提供这一实例。

引见用意:保障一个类仅有一个实例,并提供一个访问它的全局访问点。

重要处置:一个全局经常使用的类频繁地创立与销毁。

何时经常使用:当您想控制实例数目,节俭系统资源的时刻。

如何处置:判别系统能否曾经有这个单例,假设有则前往,假设没有则创立。

关键代码:结构函数是私有的。

运行实例:1、一个班级只要一个班主任。

2、Windows 是多进程多线程的,在操作一个文件的时刻,就无法防止地产生多个进程或线程同时操作一个文件的现象,所以一切文件的处置必定经过惟一的实例来启动。

3、一些设施治理器经常设计为单例形式,比如一个电脑有两台打印机,在输入的时刻就要处置不能两台打印机打印同一个文件。

好处:1、在内存里只要一个实例,缩小了内存的开支,尤其是频繁的创立和销毁实例(比如治理学院首页页面缓存)。

2、防止对资源的多重占用(比如写文件操作)。

缺陷:没有接口,不能承袭,与繁多职责准则抵触,一个类应该只关心外部逻辑,而不关心外面怎样样来实例化。

经常使用场景:1、要求消费惟一序列号。

2、WEB 中的计数器,不用每次刷新都在数据库里加一次性,用单例先缓存起来。

3、创立的一个对象须要消耗的资源过多,比如 I/O 与数据库的衔接等。

留意事项:getInstance() 方法中须要经常使用同步锁 synchronized () 防止多线程同时进入形成 instance 被屡次实例化。

java中单列形式,我要详细点的,费事各位给我引见一下?

单例形式分三种:懒汉式单例、饿汉式单例、注销式单例三种。

单例形式有一下特点:1、单例类只能有一个实例。

2、单例类必定自己自己创立自己的惟一实例。

3、单例类必定给一切其余对象提供这一实例。

一、懒汉式单例在类被加载的时刻,惟一实例曾经被创立。

这个设计形式在Java中容易成功,在别的言语中难以成功。

/*** Created by IntelliJ IDEA.* User: leizhimin* Date: 2007-9-11* Time: 14:57:08* <<Java与形式>> 单例形式-懒汉式单例*/public class LazySingleton { /*** 私有静态对象,加载时刻不做初始化*/ private static LazySingleton m_intance=null; /*** 私有结构方法,防止外部创立实例*/ private LazySingleton(){ } /*** 静态工厂方法,前往此类的惟一实例. * 当发事实例没有初始化的时刻,才初始化.* @return LazySingleton*/ synchronized public static LazySingleton getInstance(){ if(m_intance==null){ m_intance=new LazySingleton(); } return m_intance; }}二、饿汉式单例在类加载的时刻不创立单例实例。

只要在第一次性请务实例的时刻的时刻创立,并且只在第一次性创立后,以后不再创立该类的实例。

/*** Created by IntelliJ IDEA.* User: leizhimin* Date: 2007-9-11* Time: 14:45:25* <<Java与形式>> 单例形式-饿汉式单例*/public class EagerSingleton { /*** 私有的(private)惟一(static final)实例成员,在类加载的时刻就创立好了单例对象*/ private static final EagerSingleton m_instance = new EagerSingleton(); /*** 私有结构方法,防止外部创立实例*/ private EagerSingleton() { } /*** 静态工厂方法,前往此类的惟一实例.* @return EagerSingleton*/ public static EagerSingleton getInstance() { return m_instance; }}三、注销式单例这个单例实践上保养的是一组单例类的实例,将这些实例寄存在一个Map(注销薄)中,关于曾经注销过的实例,则从工厂间接前往,关于没有注销的,则先注销,然后前往。

/*** Created by IntelliJ IDEA.* User: leizhimin* Date: 2005-9-11* Time: 15:20:16* <<Java与形式>> 单例形式- 注销式单例*/public class RegSingleton { /*** 注销薄,用来寄存一切注销的实例*/ private static Map<String, RegSingleton> m_registry = new HashMap(); //在类加载的时刻增加一个实例到注销薄 static { RegSingleton x = new RegSingleton(); m_(()(), x); } /*** 受包全的自动结构方法*/ protected RegSingleton() { } /*** 静态工厂方法,前往指定注销对象的惟一实例;* 关于已注销的间接取出前往,关于还未注销的,先注销,然后取出前往* @param name* @return RegSingleton*/ public static RegSingleton getInstance(String name) { if (name == null) { name = RegSingleton; } if (m_(name) == null) { try { m_(name, (RegSingleton) (name)()); } catch (InstantiationException e) { (); } catch (IllegalAccessException e) { (); } catch (ClassNotFoundException e) { (); } } return m_(name); } /*** 一个表示性的商业方法* @return String*/ public String about() { return Hello,I am RegSingleton!; }}单列的列子第一种方式:public class Singleton { private Singleton(){} private static Singleton instance = new Singleton(); 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; } }

大痴呆教你学Java设计形式 | 第一篇:单例形式 (懒汉形式和饿汉形式)

单例设计形式是Java中一种便捷且罕用的设计形式,用于处置对象创立疑问,确保系统中只存在一个特定类的实例。

该形式触及到一个繁多的类担任创立其对象,并提供访问该惟一对象的方式,无需实例化。

设计形式在软件开发中无处不在,作为处置经常出现疑问的通用途理打算。

懒汉形式是一种便捷的成功方式,类在加载时并不初始化,仅在初次访问实例方法时才启动初始化,到达懒加载成果。

但是,该形式在多线程环境下存在重大疑问,或者造成实例化屡次,因此须要经过加锁机制来处置同步疑问。

这包含了在getInstance()方法上增加synchronized关键字,以及更为提升的双重审核懒汉式,经过两次判别防止了同步整个方法的效率损失,同时确保线程安保。

饿汉形式则与懒汉形式构成对比,类加载时就成功实例化,防止了多线程同步疑问,特意适宜频繁调用的类,提高了效率。

但其缺陷是类加载时即实例化,即使未经常使用该实例,也会形成内存糜费,没有到达懒加载成果。

单例形式实用于须要公共访问的场景,节俭内存,放慢对象访问速度。

但是,不实用于对象须要频繁变动的场景,由于单例形式难以保留不同实例之间各自的形态。

在开发环节中,应依据详细运行场景选用适宜的设计形式,以更好地处置疑问。

你可能想看:
« 上一篇
下一篇 »

相关推荐

java中什么是冒泡,冒泡算法

2026年09月06日

27阅读

java中冒号,java双冒号

2026年09月06日

26阅读

java中的->,java中的是什么意思

2026年09月06日

24阅读

java中的super用法,Java中super的说明

2026年09月06日

28阅读

java中反射的应用,java中反射的应用场景

2026年09月06日

26阅读

java中开关的定义,Java关键字有哪些

2026年09月06日

26阅读