当前位置: 主页 > JAVA语言

java单例模式-java单例模式使用场景

发布时间:2023-02-09 10:45   浏览次数:次   作者:佚名

单例模式 单例模式是一种常见的设计模式,

单例模式分为懒惰单例、饥饿单例和注册单例三种。

单例模式具有以下特点:

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

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

3.单例类必须将这个实例提供给所有其他对象。

1. Lazy-style singleton 当类被加载时java单例模式,唯一的实例已经被创建。 这种设计模式在Java中很容易实现,但在其他语言中很难实现。

单例模式 - 懒惰的单例

公共课 LazySingleton {

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

私有静态 LazySingleton m_intance=null;

/*** 私有构造函数,避免外部创建实例*/

私有 LazySingleton(){}

/*** 静态工厂方法,返回该类的唯一实例。* 当发现实例未初始化时,会进行初始化。 * @return LazySingleton */

同步公共静态 LazySingleton getInstance(){

如果(m_intance==null){

m_intance=new LazySingleton();

}

返回 m_intance;

}

}

//测试单例模式

LazySingleton lazySingleton = LazySingleton. 获取实例();

LazySingleton lazySingleton1 = LazySingleton。 获取实例();

如果(lazySingleton==lazySingleton1)){

System.out.println("同一个对象实例");

}别的{

System.out.println("不是同一个对象实例");

}

2.饥饿式单例在加载类时不创建单例实例。 只有在第一次请求实例时才会创建,并且只有在第一次创建之后才会创建,以后不会再创建该类的实例。

/***单例模式-饿了么中国式单例*/

公共课 EagerSingleton {

/**私有(private)唯一(static final)实例成员,单例对象在类加载时创建*/

private static final EagerSingleton m_instance = new EagerSingleton();

/*** 私有构造函数,避免外部创建实例*/

private EagerSingleton() {} //提供一个空的构造函数

/*** 静态工厂方法,返回该类的唯一实例。* @return EagerSingleton */

公共静态 EagerSingleton getInstance() {

返回 m_instance;

}

}

//判断是否有单case效果(系统运行时只出来一个空case)

EagerSingleton eagerSingleton = EagerSingleton。 获取实例();

EagerSingleton eagerSingleton1 = EagerSingleton。 获取实例();

如果(eagerSingleton==eagerSingleton1)){

System.out.println("同一个对象实例");

}别的{

System.out.println("不是同一个对象实例");

}

3.注册单例这个单例实际上维护了一组单例类实例,并将这些实例存储在一个Map(注册簿)中。 对于已注册的实例,它们直接从工厂返回。 未登记者,先登记后返回。

/*** 单例模式——注册单例 */

公共课 RegSingleton {

/*** 注册簿,用于存放所有注册过的实例*/

私有静态地图 m_registry = new HashMap();

//加载类时向注册表添加一个实例

静止的 {

RegSingleton x = new RegSingleton();

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

}

/*** 受保护的默认构造函数 */

受保护的 RegSingleton() {}

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

* 已登记者,直接取出并归还,未登记者,先登记后取出并归还

* @参数名称

* @返回

注册单例 */

公共静态 RegSingleton getInstance(字符串名称){

如果(名称==空){

name = "RegSingleton";

}

如果(m_registry.get(名称)== null){

尝试 {

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

} 赶上(InstantiationException e){

e.printStackTrace();

} 抓住(IllegalAccessException e){

e.printStackTrace();

} 赶上(ClassNotFoundException e){

e.printStackTrace();

}

}

返回 m_registry。 得到(名字);

}

/** * 一个说明性的业务方法 * @return String */

公共字符串关于(){

return "你好java单例模式,我是 RegSingleton!";

}}

4.单例模式的一个应用这个应用是配置文件管理类。 为了正确运行这个例子,我先在C盘下创建了一个xxxx.properties文件,内容如下: ------------------

user=rootpassword=leizhimin配置文件管理类代码如下:

单例应用-单例应用-配置文件管理*/

公共类 ConfigManager {

/*** 属性文件全名 */

private static final String PFILE = "C:\\xxx.properties";