单例模式
所谓单例模式,就是这个类在你的系统中只作为一个的存在,是为了防止重复的创造对象、销毁对象所带来的内存的开销。并且在这个类当中提供一个全局访问点
主要解决:一个全局使用的类频繁地创建与销毁。
何时使用:当您想控制实例数目,节省系统资源的时候。
特点:
- 单例类只有一个实例对象;
- 该单例对象必须由单例类自行创建;
- 单例类对外提供一个访问该单例的全局访问点;
举个栗子:
大家都知道我们用SpringBoot作为服务端,向前台返回数据的时候,一般返回的都是JsonObject
这个Object所有的控制器返回数据都可以用到,我们这里就可以考虑用单例模式来初始化这个类,
单例模式在这里分为好几个模块;
- 懒汉式
- 饿汉式(最常用)在初始化类的时候就初始化成员变量
public class JsonObject { private static Map<String,Object> map = new HashMap<>(16); //构造方法私有 private JsonObject(){} //提供全局访问点 synchronized(线程安全) public static synchronized Object resultOk(Object data){ map.clear(); map.put("status","ok"); map.put("data",data); map.put("msg","请求成功"); return map; } //提供全局访问点 public static synchronized Object resultError(String msg){ map.clear(); map.put("status","ok"); map.put("data",null); map.put("msg",msg); return map; } }
我们尝试这调用
public static void main(String[] args) { System.out.println(JsonObject.resultError("密码不能为空")); System.out.println(JsonObject.resultOk("192.168.0.1")); }
这样就完成了一个饿汉式(常用)的一种单例模式