设计模式——单例模式
来源:互联网 发布:淘宝多个客服怎么设置 编辑:程序博客网 时间:2024/06/05 22:37
单例设计模式:解决一个类在内存只存在一个对象。(保证一个类仅有一个实例,并提供一个访问它的全局访问点)
想要保证对象的唯一:
1.为了避免其他程序过多建立该类对类对象。先禁止其他程序建立该类对象。
2.还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象。
3.为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
这三部怎代码中体现?
1.将构造函数私有化。
2.在类中创建一个本类对象。
3.提供一个方法可以获取到该对象。
对于事物该怎么描述还怎么描述。
当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可。
1 /** 2 * 单例模式Singleton 3 * 应用场合:有些对象只需要一个就足够了. 4 * 作用:保证整个应用程序中某个实例只有一个. 5 * 类型:饿汉模式. 6 */ 7 public class Singleton { 8 //1.将构造方法私有化,不允许外部直接创建对象 9 private Singleton(){10 11 } 12 13 //2.创建类的唯一实例 使用private static修饰符14 private static Singleton instance = new Singleton();15 16 //3.提供一个用于获取实例的方法 使用public static修饰符 (面向对象的封装性要求控制访问,不允许其他类直接访问本类的成员变量(私有化))17 public static Singleton getInstance(){18 return instance;19 }20 }
1 /* 2 * 对象是方法被调用时,才初始化,也叫做对象的延时加载。称为:懒汉式 3 * Single类进内存,对象还没有存在,只有调用getInstance方法,才建立对象。 4 */ 5 class Single1{ 6 private Single1(){} 7 private static Single1 s=null; 8 /* 9 * 此处可以加一个synchronized(同步),使只有一个线程可以进入该方法,避免错乱。10 * 但是每次只有一个线程可以进入导致该方法效率低。11 public static synchronized Single1 getInstance(){ 12 if(s==null)13 s=new Single1();14 return s;15 }16 */17 18 /*以下方法更为高效 双重锁定*/19 public static Single1 getInstance(){20 if(s==null){21 synchronized(Single1.class) {22 if(s==null)23 s=new Single1();24 }25 } 26 return s;27 }28 }
问:懒汉式为什么要使用两次 s==null 的判断?
答:对于实例对象存在的情况,直接返回,这没有问题。当实例对象s为null并且同时有两个线程调用getInstance()方法时,它们将都可以通过第一重 s==null 的判断。然后由synchronized机制,这两个线程只有一个进入,另一个在外排队等候,必须要其中一个进入并出来后,另一个才能进入。而此时如果没有第二重的 s==null ,则第一个线程创建实例对象后,第二个线程还可以继续创建新的实例对象,这就没有达到单例的目的。
饿汉模式和懒汉模式的区别:
饿汉模式的特点是加载类时比较慢(因为类一加载就是实例化对象),但运行时获取对象的速度比较快,线程安全
懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,(改写后的线程安全)
0 0
- 设计模式—单例设计模式
- 设计模式——单例模式
- 设计模式——单例模式
- 设计模式——单例模式
- 设计模式——单例模式
- 设计模式——单例模式
- 设计模式——单例模式
- 设计模式——单例模式
- 设计模式——单例模式
- 设计模式——单例模式
- 设计模式——单例模式
- 设计模式——单例模式
- 设计模式——单例模式
- 设计模式——单例模式
- 设计模式——单例模式
- 设计模式——单例模式
- 设计模式——单例模式
- 设计模式——单例模式
- React-Native组件之 TabBarIOS和TabBarIOS.Item
- 友盟 QQ登录
- 操作系统基础(二)
- Zookeeper系统模型
- 二维数组与指针运算
- 设计模式——单例模式
- android获取屏幕分辨率代码
- LeetCode 284 Peeking Iterator
- Ubuntu 16.04安装谷歌浏览器
- http://www.cnblogs.com/renyuan/archive/2012/11/07/2758291.html
- 在手机浏览器上jplayer全屏播放视频设置在播放完成或者中间停止播放后手机浏览器的网页不能上下滚屏的解决
- java基础学习之-05
- (18)内容浏览器之开发者文件夹
- 【机房重构】---注册
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
睡眠比较浅怎么办
浅睡眠怎么调理
浅睡眠怎么回事
睡眠的
睡眠浅容易失眠
晚上睡眠浅是什么原因
婴幼儿浅睡眠
睡眠很浅的原因
婴儿睡眠浅怎么办
多梦睡眠浅怎么办
浅睡眠 做梦
婴儿 浅睡眠
多梦 睡眠浅
婴儿总是浅睡眠
睡眠浅多梦是怎么回事
宝宝浅睡眠怎么办
睡眠的作用
宝宝 睡眠浅
孩子睡眠浅
什么睡眠
婴儿睡眠很浅怎么办
孩子睡眠浅怎么办
宝宝浅睡眠的表现
婴儿睡眠很浅
婴儿晚上睡眠浅
幼儿睡眠浅
宝宝睡眠浅怎么办
宝宝睡眠很浅怎么办
浅睡眠和深度睡眠
经常半夜醒来是什么原因
睡觉睡不沉怎么回事
特别能睡是什么原因
睡不觉是什么原因
总是睡不醒是什么原因
睡觉容易惊醒
晚上睡觉总是醒
为什么有的人睡眠浅
长生殿浅籽桃
浅粉蓝色
浅粉色配什么颜色好看
浅粉色口红