`

设计模式:解决某一类问题最行之有效的方法____单例模式

 
阅读更多

 

 

               单例设计模式:一个类中只有一个对象的情况

 

思路:

  • 将构造函数私有化         è   不能创建对象
  • 在本类中创建一个对象
  • 让对象对外提供一个方法,即建立一个方法对外可以获取该对象
class Student     恶汉式:先初始化对象(开发多用)
{
    //私有构造函数,让其不能创建对象
    Student()
    {}
    //创建一个最终对象
    private static Student student=new Student();
    //提供公共方法,让其可以获取这个对象
    public static  Student sigleStudent() { //一进内存就已经创建对象
        return student;
    }
} 

  

 

 

 

class Student       // 对象是方法调用才建立也叫做对象的延时加载————-懒汉式
{
    //私有构造函数,让其不能创建对象
    Student()
    {}
    //创建一个最终对象
    private static Student student = null;
    //提供公共方法,让其可以获取这个对象
    public static  Student sigleStudent() {       Synchronized
        if (student==null) {
            student=new Student();
        }
        return student;   
        //student进内存时,对象还没有存在,只有调用getInstance时,才建立对象
    }  
}

 

单例模式在多线程下的应用:

 

class Student {
    private static Student s=null;
    private Student(){}       //私有构造函数,让其不能创建对象
    public static Student getInstance() {
        if (s==null) {
            synchronized (Student.class) {
                if (s==null) {
                    s=new Student();
                }
            }
        }
        return s;
    }
}

 



 

由图可以看出:

注意点:同步函数被静态修饰后,使用的锁是类名.class(字节码)

 

1、静态进内存时,内存中无本类对象

 

      2 、静态方法中不可以定义thissuper等关键字作为锁对象,但是可以采用该类的字节码,该字节码也是 一个对象,而且唯一,字节码后期学习反射就可以知道。

 

总结:懒汉式在多线程下是多么的低效,故我们在开发中尽量采用饿汉式单例模式。

  • 大小: 20.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics