单例模式

package com.bfh.timeline.Singleton;

/**
 * Created by bfh on 2015/11/15.
 */
public class Singleton01 {

    /**
     * @desc 懒汉load
     */

    /**
     *@desc 构造方法
     */
    private  Singleton01(){

    };

    /**
     *@desc 静态成员
     */
    private static Singleton01 singleton01 = null;

    /**
     * @desc 静态方法
     * @return
     */
    public static Singleton01 getInstance() {
        if (singleton01 == null) {
            singleton01 = new Singleton01();
        }
        return singleton01;
    }

    /**
     * @desc 同步
     */
    public synchronized static Singleton01 getInstance_synch() {
        if (singleton01 == null) {
            singleton01 = new Singleton01();
        }
        return singleton01;
    }

    /**
     *@desc  双锁制
     * 注意锁的一致性,只有访问方法用到的锁是一个才符合
     */
    public synchronized static Singleton01 getInstance_doubleCheck() {
        if (singleton01 == null) {
            synchronized (Singleton01.class){
                singleton01 = new Singleton01();
            }
        }
        return singleton01;
    }



}
View Code
package com.bfh.timeline.Singleton;

/**
 * Created by bfh on 2015/11/15.
 */
public class Singleton02 {
    /**
     * @desc 静态内部类
     */
    private static class LazyHolder {
        private static final Singleton02 INSTANCE = new Singleton02();
    }
    private Singleton02 (){}
    public static final Singleton02 getInstance() {
        return LazyHolder.INSTANCE;
    }
}
View Code
package com.bfh.timeline.Singleton;

/**
 * Created by bfh on 2015/11/15.
 */
public class Singleton03 {
    /**
     * @desc 饿汉式单例
     */
    private Singleton03() {}
    private static final Singleton03 single = new Singleton03();
    //静态工厂方法
    public static Singleton03 getInstance() {
        return single;
    }
}
View Code
package com.bfh.timeline.Singleton;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by bfh on 2015/11/15.
 */
public class Singleton04 {
    private static Map<String,Singleton04> map = new HashMap<String,Singleton04>();
    static{
        Singleton04 single = new Singleton04();
        map.put(single.getClass().getName(), single);
    }
    //保护的默认构造子  
    protected Singleton04(){}
    //静态工厂方法,返还此类惟一的实例  
    public static Singleton04 getInstance(String name) {
        if(name == null) {
            name = Singleton04.class.getName();
            System.out.println("name == null"+"--->name="+name);
        }
        if(map.get(name) == null) {
            try {
                map.put(name, (Singleton04) Class.forName(name).newInstance());
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        return map.get(name);
    }
    //一个示意性的商业方法  
    public String about() {
        return "Hello, I am RegSingleton.";
    }
    public static void main(String[] args) {
        Singleton04 single4 = Singleton04.getInstance(null);
        System.out.println(single4.about());
        Singleton04 single4_1 = Singleton04.getInstance(null);
        System.out.println(single4_1.about());
    }
}

 

posted on 2015-11-15 13:35  盖世大将军  阅读(73)  评论(0)    收藏  举报

导航