「单列实例java」单例是什么

博主:adminadmin 2022-12-16 12:54:05 92

今天给各位分享单列实例java的知识,其中也会对单例是什么进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java中怎么写一个单例的例子?

单例就是把构造方法私有化,在类里实例化对象,并且给一个共有的能返回这个对象的方法

public class Single{

private Single s = null;

private Single(){

}

public static synchronized Single getS(){

if (s == null) {

s = new Singleton();

}

return s;

}

}

java中哪些对象都是单例模式

下面列出一部分Java的单例类:

1)Runtime类

可以通过java.lang.Runtime#getRuntime()获取其实例

2)Desktop类

可以通过java.awt.Desktop#getDesktop()获取其实例

3)SecurityManager类,注意,虽然该类提供了公共无参构造函数,但其内部构造函数仍然以单例的模式在运行。可以说是单例的一种变形设计。

可以通过java.lang.System#getSecurityManager()获取其实例

java 中 单实例和多实例是指的什么?

简单的说单例就是 只能有一个实例,所以地方用到的实例都是同一个。

就好像家人吃饭,桌子是单例的,大家用的是同一个。而碗是多例的,每人都有自几的。 下面是具体的例子:

Java模式之单例模式:

单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。

特点:

1,一个类只能有一个实例

2,自己创建这个实例

3,整个系统都要使用这个实例

例: 在下面的对象图中,有一个"单例对象",而"客户甲"、"客户乙" 和"客户丙"是单例对象的三个客户对象。可以看到,所有的客户对象共享一个单例对象。而且从单例对象到自身的连接线可以看出,单例对象持有对自己的引用。

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。一些资源治理器经常设计成单例模式。

外部资源:譬如每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干个通信端口,系统应当集中治理这些通信端口,以避免一个通信端口被两个请求同时调用。内部资源,譬如,大多数的软件都有一个(甚至多个)属性文件存放系统配置。这样的系统应当由一个对象来治理这些属性文件。一个例子:Windows 回收站。

在整个视窗系统中,回收站只能有一个实例,整个系统都使用这个惟一的实例,而且回收站自行提供自己的实例。因此,回收站是单例模式的应用。 两种形式:

1,饿汉式单例类

public class Singleton { private Singleton(){} //在自己内部定义自己一个实例,是不是很希奇?

//注重这是private 只供内部调用 private static Singleton instance = new Singleton(); //这里提供了一个供外部访问本class的静态方法,可以直接访问

public static Singleton getInstance() {

return instance;

}

} 2,懒汉式单例类 public class Singleton { private static Singleton instance = null; public static synchronized Singleton getInstance() { //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次

//使用时生成实例,提高了效率!

if (instance==null)

instance=new Singleton();

return instance; } }

第二中形式是lazy initialization,也就是说第一次调用时初始Singleton,以后就不用再生成了。

注重到lazy initialization形式中的synchronized,这个synchronized很重要,假如没有synchronized,那么使用getInstance()是有可能得到多个Singleton实例。

一般来说第一种比较安全。进入讨论组讨论。

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 MapString, RegSingleton m_registry = new HashMap();

//在类加载的时候添加一个实例到登记薄

static {

RegSingleton x = new RegSingleton();

m_registry.put(x.getClass().getName(), x);

}

/**

* 受保护的默认构造方法

*/

protected RegSingleton() {

}

/**

* 静态工厂方法,返回指定登记对象的唯一实例;

* 对于已登记的直接取出返回,对于还未登记的,先登记,然后取出返回

* @param name

* @return RegSingleton

*/

public static RegSingleton getInstance(String name) {

if (name == null) {

name = "RegSingleton";

}

if (m_registry.get(name) == null) {

try {

m_registry.put(name, (RegSingleton) Class.forName(name).newInstance());

} catch (InstantiationException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

return m_registry.get(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的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-16,除非注明,否则均为首码项目网原创文章,转载请注明出处。