单例模式

---恢复内容开始---

1、饿汉式:在程序启动或单件模式类被加载的时候,单件模式实例就已经被创建。
2、懒汉式:当程序第一次访问单件模式实例时才进行创建。
   如何选择:如果单件模式实例在系统中经常会被用到,饿汉式是一个不错的选择。
     反之如果单件模式在系统中会很少用到或者几乎不会用到,那么懒汉式是一个不错的选择

1、饿汉式

public class HungerSingleTon {

    private HungerSingleTon(){
        System.out.println("the instance of hungersingleton has been create..");
    }

    private static HungerSingleTon getInstance(){
        return new HungerSingleTon();
    }

    public static void main(String[] args) {
        HungerSingleTon.getInstance();
    }

}

2、懒汉式   线程安全:这种写法在getInstance()方法中加入了synchronized锁。能够在多线程中很好的工作,而且看起来它也具备很好的lazy loading,但是效率很低(因为锁),并且大多数情况下不需要同步。

当我们类中如果还有一个静态变量如 

private static int Max_SISZ = 1024;  如果其他程序调用了这个变量,那么getInstance()也被实例化了 ,所以我们使用静态内部类来实现

public class LazySingleTon {

    private static LazySingleTon lazySingleTon = null;

    private LazySingleTon(){
        System.out.println("the instance of LazySingleTon has been create..");
    }

    private static LazySingleTon getInstance(){
        if(lazySingleTon==null){
            lazySingleTon = new LazySingleTon();
        }
        return lazySingleTon;
    }

    public static void main(String[] args) {
        LazySingleTon.getInstance();
    }
}

3.静态内部类  

public class SingleTon {
    private static Logger logger = LoggerFactory.getLogger(SingleTon.class);

    private SingleTon(){
        logger.info("the singleton instance create..");
    }

    private static class SingleHolder{
        private static SingleTon singleTon = new SingleTon();
    }

    private static SingleTon getInstance(){
        return SingleHolder.singleTon;
    }

    public static void main(String[] args) {
        SingleTon instance = SingleTon.getInstance();
    }
}

 

posted @ 2018-07-19 10:08  Bockpecehhe  阅读(142)  评论(0)    收藏  举报