首页编程java编程java单例模式是什么,什么是单例模式

java单例模式是什么,什么是单例模式

编程之家 2023-10-13 89次浏览

这篇文章给大家聊聊关于java单例模式是什么,以及什么是单例模式对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

java单例模式是什么,什么是单例模式

java 单例模式这个要怎么理解

单例模式(Singleton Pattern)是 Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

注意:

java单例模式是什么,什么是单例模式

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

2、单例类必须自己创建自己的唯一实例。

3、单例类必须给所有其他对象提供这一实例。

java单例模式是什么,什么是单例模式

介绍

意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

主要解决:一个全局使用的类频繁地创建与销毁。

何时使用:当您想控制实例数目,节省系统资源的时候。

如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。

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

应用实例:

1、一个班级只有一个班主任。

2、Windows是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。

3、一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。

优点:

1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。

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

缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。

使用场景:

1、要求生产唯一序列号。

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

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

注意事项:getInstance()方法中需要使用同步锁 synchronized(Singleton.class)防止多线程同时进入造成 instance被多次实例化。

JAVA单例模式有哪些

一、懒汉式单例

在类加载的时候不创建单例实例。只有在第一次请求实例的时候的时候创建,并且只在第一次创建后,以后不再创建该类的实例。

public class LazySingleton{

/**

*私有静态对象,加载时候不做初始化

*/

private static LazySingleton m_intance=null;

/**

*私有构造方法,避免外部创建实例

*/

private LazySingleton(){

}

/**

*静态工厂方法,返回此类的唯一实例.

*当发现实例没有初始化的时候,才初始化.

*/

synchronized public static LazySingleton getInstance(){

if(m_intance==null){

m_intance=new LazySingleton();

}

return m_intance;

}

}

二、饿汉式单例

在类被加载的时候,唯一实例已经被创建。

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(登记薄)中,对于已经登记过的实例,则从工厂直接返回,对于没有登记的,则先登记,而后返回。

public class RegSingleton{

/**

*登记薄,用来存放所有登记的实例

*/

private static Map<String, 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!";

}

}

什么是单例模式

单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。

通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。

单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。

要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。

使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义。

扩展资料:

优缺点:

优点

一、实例控制

单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。

二、灵活性

因为类控制了实例化过程,所以类可以灵活更改实例化过程。

缺点

一、开销

虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。

二、可能的开发混淆

使用单例对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。

三、对象生存期

不能解决删除单个对象的问题。在提供内存管理的语言中(例如基于.NET Framework的语言),只有单例类能够导致实例被取消分配,因为它包含对该实例的私有引用。在某些语言中(如 C++),其他类可以删除对象实例,但这样会导致单例类中出现悬浮引用。

参考资料:百度百科---单例模式

文章到此结束,如果本次分享的java单例模式是什么和什么是单例模式的问题解决了您的问题,那么我们由衷的感到高兴!

85式太极拳(85式太极拳口诀表) java中dao是什么意思?java中的Dao类是什么意思