java 单例 生命周期_单例模式--- 声明周期托管方式

声明周期托管方式,IOC

JAVA代码

MyManager.java

import java.util.HashMap;

/**

* 为了管理对象的产生

* 对象的控制权给当前类负责

* 生命周期托管实现对象的单例

* IOC控制反转

*/

public class MyManager {

// 存储所有被管理的对象

private static HashMap beanMap = new HashMap<>();

// 获取任何类的一个对象

// className : 类名

// return: (泛型T)

public static T getBean(String className) {

T obj = null;

try {

// 去beanBox看有没有存在了

obj = (T) beanMap.get(className);

if (obj == null) {

// 1. 通过类名获取类

Class clazz = Class.forName(className);

// 2. 通过反射产生一个对象

obj = (T) clazz.newInstance();

// 3. 加入集合

beanMap.put(className, obj);

}

} catch (Exception e) {

e.printStackTrace();

}

return obj;

}

}

Sign.java

// 单例模式 IOC

// 生命周期给别人托管

class Sign {

public Sign() {

System.out.println("创建了一个实例");

}

}

Demo.java

public class Demo {

public static void main(String[] args) {

// 获取一个实例

Sign instance1 = MyManager.getBean("Sign");

// 再获取一个实例 ;注意,构造函数也只是执行了一次,所以引用一个对象

Sign instance2 = MyManager.getBean("Sign");

System.out.println(instance1);

System.out.println(instance2);

if (instance1 == instance2) {

System.out.println("引用了同一个实例");

} else {

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

}

}

}

执行结果:

1a5e7a270418335fa7d60d5ec8e81a5d.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值