A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

单例模式都是将构造函数私有化,只对外提供一个获取对象的方法。private起到禁止其它程序创建该对象的作用。static修饰的最先加载,先初始化。
回复 使用道具 举报
  1. 单例模式用于保证在程序的运行期间某个类有且仅有一个实例。
  2. 饿汉式:
  3. class  SingleClass{
  4.        
  5.          //将构造函数私有化,不允许在类的外部创建该类的实例
  6.         private SingleClass(){}
  7.         /*创建该类的实例,并将其私有化,
  8.         *该实例 需要在方法调用,因此也必须是静态的
  9.         *对象一创建,就进行初始化,这种叫做饿汉式
  10. */
  11.         private static SingleClass singleInstance = new SingleClass();
  12.         /*对外提供方法来获取该类的实例,该方法必须通过public修饰
  13.         *该方法只能被类名调用,因此,方法必须是静态的
  14.         *调用该方法是为了获取该类的实例,因此,该方法的返回值类型是该类类型*/
  15.         public static SingleClass getInstance(){
  16.                 return singleInstance;
  17.         }
  18. }
  19.        
  20. 懒汉式
  21.        
  22. class  SingleClass{

  23.         private SingleClass(){}
  24.        
  25.         private static SingleClass  singleInstance  =null;
  26.        
  27.         public static SingleClass getInstance(){
  28.        
  29.                 /*如果对象为null,才创建*/
  30.                 if (singleInstance == null)
  31.                         singleInstance = new SingleClass();
  32.                
  33.                 return singleInstance;

  34.         }
  35. }


  36. 懒汉式的线程安全问题
  37. public static SingleClass getInstance(){
  38. //这里会牵涉到线程安全问题,在保证同步的情况下注重效率
  39.                 //在此处判断一次,若已经创建实例,就不在判断锁,稍微提高效率
  40.                 if(singleInstance ==null) {
  41.                         //此处加锁,保证只有一个线程创建实例
  42.                         synchronized(SingleClass.class){
  43.                                 if (singleInstance == null)
  44.                                         singleInstance = new SingleClass();
  45.                         }
  46.                 }
  47.                 return singleInstance;
  48. }
复制代码
回复 使用道具 举报
单例设计模式 就是保证该类在程序中只能存在一个对象,所以不能让别人实例化该类,所以要私有化(private)该类的构造函数,但是你要为别人提供一个该类的唯一对象,所以你要在该类中定义一个静态的方法返回本类对象。

饿汉呢就好比一个人非常饿迫不及待的上来就在本类中new了一个对象并返回,懒汉正好想反,什么时候饿了(在被调用时)才创建该对象并返回,也就是延迟加载。
    这是我对单例的理解希望对你有用
回复 使用道具 举报
不要急不要急,稍微往后面学一点再看这一点就懂了。
回复 使用道具 举报
static修饰的在类加载时初始化,只初始化一次
回复 使用道具 举报
懒汉式是因为刚开始的时候需要判断才会去建立这个对象,所以有点慢,至于加私有呢,那是因为要控制其他的类建立这个类的对象,所以需要私有化这个类的构造函数
回复 使用道具 举报
我晕,这次刚开始嘛!这么快就否定自己了?
回复 使用道具 举报
记不住  就拼命记住为止!
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马