单例设计模式

来源:互联网 发布:李荣浩后羿知乎 编辑:程序博客网 时间:2024/05/01 00:11

单例设计模式

保证类在内存中只有一个对象。

如何保证类在内存中只有一个对象呢?

  • (1) 控制类的创建,只让本类来管理本类的对象的创建。private修饰构造方法。
  • (2) 在本类中定义一个本类的对象。static Singleton s。
  • (3) 保证对象行为不影响自身的状态。两种策略:

    • ① 采用“饿汉式”or“懒汉式”单例设计模式;
    • ② 用final直接修饰属性
  • 为什么说第三个条件是必要的呢?看如下的例子:

class Singleton {    //1.私有构造方法,其他类不能访问该构造方法。    private Singleton(){}    //2.声明一个引用    public static Singleton s = new Singleton();    }
  • 如上的代码片段,已经满足了条件(1)和(2),为什么说其没有实现单例模式呢?观察如下的测试代码片段:
Singleton s1 = Singleton.s; Singleton.s = null;Singleton s2 = Singleton.s;System.out.println(s1 == s2); // 结果为false
  • 原因很简单:s1引用指向的是一个Singleton对象,而s2的引用指向的是null,所以比较引用,两者是不同的。不满足单例模式。

单例的3种写法:

  • (1) 饿汉式(开发中使用,推荐)
class Singleton {    //1.私有构造方法,其他类不能访问该构造方法.    private Singleton(){}    //2.创建本类私有对象    private static Singleton s = new Singleton();    //3.对外提供公共的访问方法    public static Singleton getInstance() {                     return s;    }}
  • (2) 懒汉式 (单例的延迟加载模式,有并发问题)
class Singleton {    //1.私有构造方法,其他类不能访问该构造方法.    private Singleton(){}    //2.声明一个私有引用    private static Singleton s ;    //3.对外提供公共的访问方法    public static Singleton getInstance() {                     if(s == null) {            //此处存在并发问题            s = new Singleton();        }        return s;    }}
  • (3) final
class Singleton {    //1.私有构造方法,其他类不能访问该构造方法    private Singleton(){}    //2.声明一个引用    public static final Singleton s = new Singleton();}

饿汉式和懒汉式的区别

区别 饿汉式 懒汉式 时空 空间换时间 时间换空间 多线程访问 不会创建多个对象 有可能会创建多个对象

实际场景

  • java.lang.Runtime 采用饿汉式的单例设计模式
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 老婆婚内出轨丈夫应该怎么办 微信小程序获取用户信息失败怎么办 拼多多砍价没有完成怎么办 微信人数上限了怎么办 微信5000人满了怎么办 微信朋友满了怎么办啊 失业金签到忘签怎么办 gec安全密码忘了怎么办 唯品会微信商城地址错怎么办跨省 电脑突然没网了怎么办 移动光猫只能连一台电脑怎么办 网上银行用户名和密码忘了怎么办 中国银行网银用户名忘了怎么办 中行企业网银证书过期怎么办 腾讯会员被别人登录了怎么办 微信限90天提现转帐功能怎么办? 星巴克券过期了怎么办 京东买面膜发个空包怎么办 手机低于4.4版本怎么办才能恢复 263云通信密码忘了怎么办 有信电话拉黑了怎么办 微信手机充值冲错了怎么办 国通石油卡怎么办红卡 善融商城有假货怎么办 中百购物卡丢了怎么办 cncbk被骗25万该怎么办 中银e贷额度冻结怎么办 招行抵押贷循环额度怎么办 小额钱袋被拒了怎么办 银行需要提供消费贷款发票怎么办 中银e贷款逾期怎么办 按揭房不想要了怎么办 房贷不想还了怎么办 融e借没有u盾怎么办 窗式空调声音大怎么办 瑞得卡过期了怎么办 对公账号转错了怎么办 中银e令丢了怎么办 中银e贷到期了怎么办 招行信用卡附属卡怎么办 华普超市购物卡怎么办