博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[大话设计模式]设计模式----单例设计模式
阅读量:4685 次
发布时间:2019-06-09

本文共 1300 字,大约阅读时间需要 4 分钟。

解决的问题:

保证一个类在内存中的唯一性。

比如,必须要对于多个程序使用同一个配置信息时,就需要保证该对象的唯一性。

原理:

如何保证对象的唯一性呢?

  1. 不允许其他程序使用new创建该类对象
  2. 在该类中创建一个本类对象
  3. 对外提供一个公共方法,使其他程序可以获取该实例。

步骤:

  1. 私有化该类的构造函数
  2. 通过new在本类中创建一个本类对象
  3. 定义一个公共的方法,将创建的对象返回。

单利设计模式的分类:

1.饿汉式

//饿汉式class Single{    //私有化该类的默认构造函数,使外部不能new该类对象    private Single()    {    }    //创建一次该类对象    private static Single s = new Single();    //对外提供获取该对象的方法    public static Single getInstance(){        return s;    }    }
class SingleDemo{    public static void main(String[] args){        Single s1 = SIngle.getInstance();        Single s2 = SIngle.getInstance();        System.out.println(s1==s2);    }}

内存图解:

说明:

  1. main函数进栈,并执行第一句代码Single s1 = SIngle.getInstance(); ,创建s1引用
  2. 在方法区中加载Single类的方法,在非静态区有Single的构造函数,静态区有s成员变量、getInstance方法
  3. 在堆中创建一个Single对象,并让s指向该对象
  4. 执行Single s1 = SIngle.getInstance(); 赋值操作,使s1的值为s的值。
  5. s2同理,由于对内存中只有一个该类的对象,并使静态区的s指向它,因此s1和s2指向同一对象。

2.懒汉式

//l懒汉式class Single{    //私有化默认构造函数    private Single(){}    //声明一个该类的引用    private static Single s;    //对外提供获取该类唯一对象的方法    public static Single getInstance(){        if(s==null)            //如果s是第一次创建            s = new Single();        return s;    }}

 

饿汉和懒汉模式的区别:

饿汉模式,类一加载对象就已经建立

懒汉模式,类加载时没有对象,只有调用了getInstance方法才创建对象,即延迟加载

 

饿汉模式效率比懒汉模式高,因为饿汉模式不像懒汉模式那样每次获取对象都做判断

懒汉模式在多线程中可能存在安全问题。

转载于:https://www.cnblogs.com/ma-fei/p/4875976.html

你可能感兴趣的文章
【BZOJ5305】【HAOI2018】—苹果树(组合数学)
查看>>
【BZOJ3821】【UOJ#46】【清华集训2014】—玄学(线段树分治)
查看>>
【leetcode 简单】 第八十三题 反转字符串中的元音字母
查看>>
【leetcode 简单】 第一百零八题 找到所有数组中消失的数字
查看>>
引用同一解决方案的类库工程不成功
查看>>
[转]单例模式中为什么用枚举更好
查看>>
selenium 获取断言信息
查看>>
弹出层详解,从简单到复杂
查看>>
c# 模拟get请求例子,演示Session会话状态。
查看>>
[.net 面向对象程序设计深入](0) 开篇
查看>>
C 多线程学习
查看>>
POJ3186:Treats for the Cows(区间DP)
查看>>
【stanford C++】——2.C++中函数
查看>>
监听事件android activity中键盘的监听
查看>>
bash中的转义
查看>>
浅论网站优化还有涉足百度产品的必要吗
查看>>
#Sam有话说#一握在手,话说十年
查看>>
Mysql和Oracle的卸载
查看>>
web框架
查看>>
js工具之QUnit
查看>>