设计模式——SINGLETON
- 作者:DecaMinCow
- 博客:http://blog.csdn.net/m0_37567301
- 邮箱:decamincow#gmail.com (#->@)
使用场景
- 需要生成唯一序列的环境
- 需要频繁实例化然后销毁的对象
- 创建对象时耗时过多或者耗资源过多,但又经常用到的对象
- 方便资源相互通信的环境
要用到面相对象编程思想
所以静态方法和单例模式使用时,如果是业务相关逻辑用单例。与业务无关的用静态方法。
示例
线程安全的单例
public class Singleton {
private Singleton(){
System.out.println("Hello Singleton");
}
private static Singleton instance;
public static Singleton getInstance(){
synchronized ("") {
if (instance == null){
instance = new Singleton();
}
}
return instance;
}
public static void main(String[] args) {
for (int i = 0; i < 1000; i++){
Thread t = new Thread(() -> {
Singleton.getInstance();
});
t.start();
}
}
}
spring 把实例都注册到 map 中去管理, 简单理解代码
public class RegisterSingleton {
private final static Map register = new HashMap();
public Object getBean(String name) {
Object instance;
synchronized (register) {
instance = register.get(name);
}
if (instance == null) {
try {
instance = Class.forName(name).newInstance();
register.put(name, instance);
} catch (Exception e) {
e.printStackTrace();
}
}
return instance;
}
public static void main(String[] args) {
System.out.println(new RegisterSingleton().getBean("com.example.demo.controller.TestRestController"));
System.out.println(new RegisterSingleton().getBean("com.example.demo.controller.TestRestController"));
}
}