java 全局单例_Java单例模式

本文详细介绍了Java中的单例模式,包括其目的、应用场景和实现方式,如饿汉式、静态块初始化、延迟初始化、线程安全的单例、双重检查锁定、内部静态辅助类、序列化单例和枚举单例等。单例模式确保类只有一个实例,并提供全局访问点,适用于需要频繁创建和销毁的对象。文章还讨论了反射对单例模式的影响及其潜在问题。
摘要由CSDN通过智能技术生成

再孬再好,就你一个

单例模式

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

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

注意:

单例类限制类的实例个数,保证类的实例在JVM的世界里只有一个类的实例对象。

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

单例类必须提供一个全局性的公共访问方式获取单例类的实例对象

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

介绍

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

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

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

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

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

应用场景: java.lang.Runtime类、日志、驱动器、缓存、线程池等l

d35c3400c9e30be3c0ddc08bb48f685a.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

实现

我们将创建一个 SingleObject 类。SingleObject 类有它的私有构造函数和本身的一个静态实例。

SingleObject 类提供了一个静态方法,供外界获取它的静态实例。SingletonPatternDemo,我们的演示类使用 SingleObject 类来获取 SingleObject 对象。

步骤 1

创建一个 Singleton 类,SingleObject.java

public class SingleObject {

//创建 SingleObject 的一个对象

private static SingleObject instance = new SingleObject(0);

//让构造函数为 private,这样该类就不会被实例化

private SingleObject(int i){

System.out.println("我是一个单例"+i);

}

//获取唯一可用的对象

public static SingleObject getSingletonInstance(){

return instance;

}

public void showMessage(String msg){

System.out.println("我是一个单例的方法调用,"+msg);

}

}

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

步骤 2

从 singleton 类获取唯一的对象,测试类SingletonPatternDemo.java

/**

*

* @author dgm

* @describe "测试单例模式"

* @date 2020年5月13日

*/

public class SingletonPatternDemo {

public static void main(String[] args) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {

// 不合法的构造函数

// 编译时错误:构造函数 SingleObject() 是不可见的

// SingleObject object = new SingleObject();

// 获取唯一可用的对象

SingleObject object = SingleObject.getSingletonInstance();

// 显示消息

object.showMessage("正常流程");

}

}

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

输出效果:

a91a85c013d1c61cb5ebea5ee8554f23.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

4c483c03800726aba8a1e75a2b551fbb.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

我就一一列举:

1.  饿汉式初始化 Eager initialization

在饿汉初始化模式下,单例类的实例是在类加载的时候完成了创建,这是最简单的创建单例的方式,但它有个缺陷就是客户端还没使用已创建好的单例实例。下面就是实现了静态初始化的单例类

/**

*

* @author dgm

* @describe "饿汉式初始化单例"

*/

public class EagerInitializedSingl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值