单例模式--- 声明周期托管方式
声明周期托管方式,IOC
JAVA代码
MyManager.java
import java.util.HashMap;
/**
 * 为了管理对象的产生
 * 对象的控制权给当前类负责
 * 生命周期托管实现对象的单例
 * IOC控制反转
 */
public class MyManager {
    // 存储所有被管理的对象
    private static HashMap<String, Object> beanMap = new HashMap<>();
    // 获取任何类的一个对象
    // className : 类名
    // return: (泛型T)
    public static <T> 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("不是同一个实例");
        }
    }
}
执行结果:

 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号