首页 / 设计模式 / 设计模式1:单例模式(1)
设计模式1:单例模式(1)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了设计模式1:单例模式(1),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2094字,纯文字阅读大概需要3分钟。
内容图文
什么是单例模式?
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
作用:在整个生命周期,一个类的所有对象,都是指向了同一块内存空间,而系统不需要为该类的每一个对象都在堆分配空间。任何时候,单例类的实例只有一个。
单例模式是通过单例类来实现的,其中单例类的构成分为三部分:
1.指定其构造方法为私有的
2.定义一个公有的类变量作为该类的唯一对象
3.公开一个公共方法用来获取这个类的唯一实例
注:类的构造方法我们一般定义为公有的,但它也可以定义为私有,当一个类的构造方法被定义为私有的时候,我们就没法使用这个构造方法了,也就是不能通过这个构造方法来创建该类的对象了,当一个类的所有构造方法都定义为私有,那么我们就无法在该类之外创建这个类的对象,所有就必须提供一个公共的方法,外界通过这个唯一的入口来获取一个已经实例化的类了。
单例模式有两种:
1.饿汉式,线程安全的
2.懒汉式,线程不安全
其中饿汉式和懒汉式的不同仅在于这个类的唯一实例创建的时机,饿汉式是在外界获取这个实例之前就已经初始化了这个实例,而懒汉式则是在外界第一次获取这个实例的时候才初始化这个实例,以后不再初始化,懒汉式是线程不安全的,原因在于当多个线程都开始创建这个对象时,由于cpu是采用时间片轮转法,可能会返回单例类对象的多个引用,从而导致线程不安全。
饿汉式:
1 class SingleInstance{ 2 // 定义一个本类的对象 3 private static SingleInstance singleInstance = new SingleInstance(); 4 5//构造方法私有化:不能在本类的外部通过new创建对象 6private SingleInstance(){ 7 8 } 910//向外界提供可访问的方法,返回当前类的对象11publicstatic SingleInstance getInstance(){ 12return singleInstance; 13 } 14 }
懒汉式:
1 class SingleInstance{ 2 // 定义一个本类的对象 3 private static SingleInstance singleInstance; 4 5 // 构造方法私有化:不能在本类的外部通过new创建对象 6 private SingleInstance(){ 7 8 } 9 10 // 向外界提供可访问的方法,返回当前类的对象 11 public static SingleInstance getInstance(){ 12 if(singleInstance==null) 13 singleInstance = new SingleInstance(); 14return singleInstance; 15 } 16 }
示例:创建单例类的两个对象,判断这两个对象的引用是否相同。
1 package com.pattern; 2 3 public class Test1 { 4 public static void main(String[] args) { 5 // 创建两个对象 6 SingleInstance singleInstance1 = SingleInstance.getInstance(); 7 SingleInstance singleInstance2 = SingleInstance.getInstance(); 8 9//打印这两个引用所指向的对象地址10 System.out.println("singleInstance1:"+singleInstance1); 11 System.out.println("singleInstance2:"+singleInstance2); 12 System.out.println(singleInstance1==singleInstance2); 1314 } 15} 16class SingleInstance{ 17//定义一个本类的对象18privatestatic SingleInstance singleInstance = new SingleInstance(); 1920//构造方法私有化:不能在本类的外部通过new创建对象21private SingleInstance(){ 2223 } 2425//向外界提供可访问的方法,返回当前类的对象26publicstatic SingleInstance getInstance(){ 27return singleInstance; 28 } 29 }
效果:
单例模式的应用场景:
(图片来源:http://blog.csdn.net/tanyujing/article/details/14160941)
未完,待续。
原文:http://www.cnblogs.com/enjoy-coding/p/4803518.html
内容总结
以上是互联网集市为您收集整理的设计模式1:单例模式(1)全部内容,希望文章能够帮你解决设计模式1:单例模式(1)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。