一、单例设计模式,饿汉式(类一进入内存就创建好了对象。)提倡使用。
1,先来看一个简单的demo:
public class Singl { //有构造器 private Singl(){} //初始化类的时候就在jvm中创建了一个对象 private static Singl s = new Singl(); //对外提供一个获取这个对象的方法 public static Singl getSingl(){ return s; } }
demo2:
public class SingleDmo2 { private static Map<String,String> map = new HashMap<>(); // 1,有一个空参数的构造函数 private SingleDmo2(){} // 2,在本类被加载的时候就创建一个对象使用synchronized加锁防止多线程访问创建多个成员变量 public static synchronized Map getSingle(){ return map; } public static void main(String[] args){ Map<String,String> single = SingleDmo2.getSingle(); single.put("lww","lww"); Map<String,String> single2 = SingleDmo2.getSingle(); single2.put("eddy", "eddy"); single2.put("eddy2", "eddy2"); for(Map.Entry<String,String> entry : single2.entrySet()){ System.out.println(entry.getKey() + ":" + entry.getValue()); } } }
demo3:使用静态内部类来设计单例。
public class SingleMd5Game { private Map<String, String> data; //获取到这个类中的map(4) 调用的方式为:Map<String, String> data = SingleMd5Game.getInstance().getData(); public Map<String, String> getData() { return data; } //被静态内部类调用,初始化一个map(2) private SingleMd5Game() { data = new HashMap<>(); } //静态内部类对本类进行初始化(1) private static class Inner { static SingleMd5Game sing = new SingleMd5Game(); } //对外提供一个获取本类的方法(3) public static synchronized SingleMd5Game getInstance() { return Inner.sing; } public String getData(String md5){ return md5; } public static void mian(String[] args){ Map<String, String> data = SingleMd5Game.getInstance().getData(); } }
二、类还没有进内存,只有调用了getInstance方法时,才创建对象。
/** * Created by Administrator on 2015/8/28. */ public class Single { private static Single s = null; private Single(){} public static Single getInstance(){ if(s==null){ synchronized (Single.class){ s = new Single(); } } return s; } }
浙公网安备 33010602011771号