首页 > 其他 > 详细

单例模式的学习

时间:2019-02-10 21:50:28      阅读:176      评论:0      收藏:0      [点我收藏+]

单例模式

第一章介绍

单例设计模式:保证类在内存中只有一个对象

第二章饿汉式(上来就创建私有的本类对象)

    /*

     *

     * 单例设计模式:保证类在内存中只有一个对象

     */

public static void main(String[] args) {

//  Singleton s1= new Singleton(); //3.由于私有构造方法,类外无法直接new 对象

    /*Singleton s1= Singleton.s;

    Singleton s2= Singleton.s;

    System.out.println(s1==s2);*/

    //上述两行会导致能够修改s的值所以得私有成员变量

    //5.重新通过get方法获得成员变量

    Singleton s1= Singleton.getInstance();

    Singleton s2= Singleton.getInstance();

    System.out.println(s1==s2);

}

 

}

/*

 * 饿汉式

 */

class Singleton{

    //1.私有构造方法,类外无法直接new 对象,其他类无法访问该方法

    private Singleton() {

    }

    //2.创建本类对象

//  public static Singleton s =new Singleton();//会导致能够修改s的值所以得私有成员变量

    private static Singleton s =new Singleton();

    //4.对外提供公共的访问方法get方法

    public static Singleton getInstance() {

       return s;

    }

}

第三章懒汉式(单例的延迟加载,用的时候再创建对象)

/*

 * 懒汉式:单利模式的延迟加载模式

 * 会有安全隐患

 */

class Singleton2 {

    //1.创建本类对象,但不实例化

    private static Singleton2 s;

    //2.私有化构造方法

    private Singleton2 () { 

    }

    //3.对外提供公共的访问方法

    public static Singleton2 getInstance() {

       if(s==null) {

           //多线程情况下,当线程1进入if后等待,cpu使用权被线程2抢去了也进入了if判断语句那么最终会造成多个对象被创建出来

           //所以懒汉式一般不使用

           s=new Singleton2();

       }

       return s;

    }

}

第四章饿汉式和懒汉式的区别

  1. 饿汉式是空间换时间,在服务器启动的时候就创建了对象
  2. 懒汉式是时间还空间,在用的时候再创建对象,但是不推荐本模式
  3. 在多线程访问时,饿汉式不会创建多个对象,懒汉式有可能会创建多个对象

第五章单例模式的第三种方法final

class Singleton3 {

    //1.创建本类对象,但不实例化

    public static final Singleton3 s= new Singleton3();

    //2.私有化构造方法

    private Singleton3 () { 

    }

    //3.对外提供公共的访问方法

    public static Singleton3 getInstance() {

       return s;

    }

}

单例模式的学习

原文:https://www.cnblogs.com/sxgp2013/p/10360229.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!