Eddyer
发下工资正心凉,一紧张,码全忘。似曾相识,何用却不详。设计模式两茫茫,看代码,泪千行。步出小窝见同事,都一样,很受伤。如此工资,无颜见嫩娘。只待晚上交钱日,接绳套,系房梁。

一、单例设计模式,饿汉式(类一进入内存就创建好了对象。)提倡使用。

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;
    }
}

 

posted on 2015-08-28 12:54  Eddyer  阅读(165)  评论(0)    收藏  举报