黑马程序员--------单例设计模式

来源:互联网 发布:淘宝客户运营平台 编辑:程序博客网 时间:2024/05/28 05:19

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一.      为什么要使用单例设计模式?

可以保证一个类在内存中的对象唯一性。

比如,程序读取一个配置文件的时候,就可以把配置为文件封装成对象。当要求方便的操作其中的数据,又要保证多个程序读到的是同一个配置文件对象,就需要这个配置文件对象在内存中是唯一的

二.      怎样保证对象唯一性呢?

思路:

1.      让本类的构造函数私有化,这样其他的类就不可以创建本类对象。

2.      在本类中创建一个私有的本类对象。

3.      对外提供方法,让其他的类可以获取这个对象。

3.      单例设计模式的分类:

单例设计模式有两种,一种是懒汉设计模式(又称为延迟加载设计模式),一种是饿汉设计模式。

饿汉设计模式的代码体现如下:

class Single{        //私有本类中的构造函数        private Single(){}        //创建本类对象        private static Single s= new Single();        //对外提供获取本来对象方法        public static Single getInstance()       {               return s;        }}
注意问题:

  由于外界无法创建Single对象,没有对象,那就无法调用getInstance方法,这时需要将getInstance方法静态化,这样外界就可以通过类名直接调用该方法。

懒汉模式:

public class SingleDemo{      public static voidmain(String[] args)      {              //获取Single类的实例对象s              Single s = Single.getInstance();              //获取Single类的实例对象s2              Single s2 = Single.getInstance();              System.out.println(s==s2); //true      }}class Single{      //私有构造函数      private Single(){}      //在本类中创建本类对象      private static Single instance = null;      //对外提供静态访问方法,获取本类实例对象      public static Single getInstance()      {              if(instance == null ) // 这里会有线程安全问题              {                      instance = new Single();              }              return instance;      } }

三,总结:

懒汉模式,它的特点是运行时获得对象的速度比较慢,但加载类的时候比较快。它在整个应用的生命周期只有一部分时间在占用资源。

饿汉模式,它的特点是加载类的时候比较慢,但运行时获得对象的速度比较快。它从加载到应用结束会一直占用资源。

从用户体验的角度来说,我们应该首选饿汉模式。我们愿意等待某个程序花较长的时间初始化,却不喜欢在程序运行时等待太久,给人一种反应迟钝的感觉,所以对于有重量级对象参与的单例模式,我们推荐使用饿汉模式

在并发的情况下,懒汉式是不安全的。如果两个线程,我们称它们为线程1和线程2,在同一时间调用getInstance()方法,如果线程1先进入if块,然后线程2进行控制,那么就会有两个实例被创建。

四,懒汉设计模式缺陷的解决方案:

我们可以使用线程锁来解决这个问题,代码反映如下:

class Single{      //私有构造函数      private Single(){}      //在本类中创建本类对象      private static Single instance = null;      //对外提供静态访问方法,获取本类实例对象      public static Single getInstance()      {      if(instance == null)      {      synchronized(Single.class)      {              if(instance == null )              {                      instance = new Single();              }      }      }       return instance;      } }



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 校园网经常断网怎么办 身份证号姓名电话号码泄露怎么办 中国邮政银行短信通知怎么办 中通递送不到怎么办 智齿碎了一半怎么办 驾照扣50分怎么办 办不了租赁合同怎么办 收到佰仟律师函怎么办 佰仟律师打电话怎么办 右转车道右方路禁行怎么办 收费站没带现金怎么办 过收费站没有现金怎么办 高速收费站没有现金怎么办 过收费站没现金怎么办 查社保忘记密码怎么办 医保密码忘记了怎么办 买房房东不过户怎么办 转户口金牛区怎么办 高中办休学手续怎么办 电动车灯壳发黄怎么办 买二手车上当了怎么办 成都社保卡遗失怎么办 成都个人怎么办健康证 成都健康证怎么办周末 扶贫办 2020年后怎么办 学历认证通不过怎么办 中考落榜后该怎么办 高考没有填志愿怎么办 上海怎么办人户分离 四级考试被禁考怎么办 高考志愿没填怎么办 腓总神经损伤怎么办 怀孕了没有医保怎么办 卫生间便池堵了怎么办 管道被泥沙堵住怎么办 错过报志愿时间怎么办 报名准考证丢了怎么办 高中毕业证掉了怎么办 军人买不到票怎么办 大学作弊被开除怎么办 信访复查不受理怎么办