实现一个共享变量的容器
在平时写代码当中经常会遇到变量传值的一些困惑,假如说有一个对象我需要在多个类当中使用,如果使用方法的参数来传递的话就会很麻烦,每个地方都要传,这个时候我们可以将他定义为一个静态变量,但是有很多变量需要共享的时候使用静态变量就不太好管理,我们可不可以写一个容器,然后将这些变量全部存到容器当中去,当然是可以的,我们可是使用单例模式设计一个容器,这样容器中的变量就可以共享了,下面开始撸代码
package com.test;
import java.util.HashMap;
import java.util.Map;
public class ApplicationContext {
//定义一个容器对象
private static ApplicationContext application ;
//使用一个map集合来保存变量
private Map<String, Object> map = new HashMap<String, Object>() ;
//私有化构造方法(因为是单例模式,不允许用户随便产生对象)
private ApplicationContext(){}
//获取对象的方法(记得加同步,不然多线程中还是有可能创建出多个对象)
public synchronized static ApplicationContext getInstance(){
if(application == null){
application = new ApplicationContext() ;
}
return application ;
}
//下面是对map集合的增删改查
public void addAttribute(String key , String value){
map.put(key, value) ;
}
public <T>T get(String key){
return (T) map.get(key) ;
}
public void delete(String key){
map.remove(key) ;
}
}
容器已经封装完成了,下面做测试(当然有时候我们希望对象只在当前线程共享,这样的话我们可以将容器中map的键定义为当前线程,我就不写这个了)
package com.test;
public class Test1 {
public static void main(String[] args) {
//获取对象,因为采用的是单例模式,所以在任何地方取对象都是此对象
ApplicationContext application = ApplicationContext.getInstance() ;
//添加数据
application.addAttribute("name", "wf");
//查询数据
String name = application.get("name") ;
System.out.println(name);
//删除数据
application.delete("name");
System.out.println(application.get("name"));
}
}
输出结果:
wf
null