欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    java单例模式详解.doc

    • 资源ID:79327528       资源大小:52KB        全文页数:5页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    java单例模式详解.doc

    Java 单例模式详解 概念:java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。单例模式有一下特点:1、单例类只能有一个实例。2、单例类必须自己自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。首先看一个经典的单例实现。public class Singleton     private static Singleton uniqueInstance = null;     private Singleton()        / Exists only to defeat instantiation.         public static Singleton getInstance()        if (uniqueInstance = null)            uniqueInstance = new Singleton();              return uniqueInstance;        / Other methods.Singleton通过将构造方法限定为private避免了类在外部被实例化,在同一个虚拟机范围内,Singleton的唯一实例只能通过getInstance()方法访问。(事实上,通过Java反射机制是能够实例化构造方法为private的类的,那基本上会使所有的Java单例实现失效。此问题在此处不做讨论,姑且掩耳盗铃地认为反射机制不存在。)但是以上实现没有考虑线程安全问题。所谓线程安全是指:如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。显然以上实现并不满足线程安全的要求,在并发环境下很可能出现多个Singleton实例。1 public class TestStream 2 private String name; 3 public String getName() 4 return name; 5 6 public void setName(String name) 7 this.name = name; 8 9 /该类只能有一个实例10 private TestStream() /私有无参构造方法11 /该类必须自行创建12 /有2种方式13 /*private static final TestStream ts=new TestStream();*/14 private static TestStream ts1=null;15 /这个类必须自动向整个系统提供这个实例对象16 public static TestStream getTest()17 if(ts1=null)18 ts1=new TestStream();19 20 return ts1;21 22 public void getInfo()23 System.out.println("output message "+name);24 25 1 public class TestMain 2 public static void main(String args) 3 TestStream s=TestStream.getTest(); 4 s.setName("张孝祥"); 5 System.out.println(s.getName(); 6 TestStream s1=TestStream.getTest(); 7 s1.setName("张孝祥"); 8 System.out.println(s1.getName(); 9 s.getInfo();10 s1.getInfo();11 if(s=s1)12 System.out.println("创建的是同一个实例");13 else if(s!=s1)14 System.out.println("创建的不是同一个实例");15 else16 System.out.println("application error");17 18 19 运行结果:张孝祥张孝祥output message 张孝祥output message 张孝祥创建的是同一个实例结论:由结果可以得知单例模式为一个面向对象的应用程序提供了对象惟一的访问点,不管它实现何种功能,整个应用程序都会同享一个实例对象。1.饿汉式单例类 1 /饿汉式单例类.在类初始化时,已经自行实例化 2 public class Singleton1 3 /私有的默认构造子 4 private Singleton1() 5 /已经自行实例化 6 private static final Singleton1 single = new Singleton1(); 7 /静态工厂方法 8 public static Singleton1 getInstance() 9 return single;10 11 2.懒汉式单例类 1 /懒汉式单例类.在第一次调用的时候实例化 2 public class Singleton2 3 /私有的默认构造子 4 private Singleton2() 5 /注意,这里没有final 6 private static Singleton2 single=null; 7 /静态工厂方法 8 public synchronized static Singleton2 getInstance() 9 if (single = null) 10 single = new Singleton2();11 12 return single;13 14 3.登记式单例类 1 import java.util.HashMap; 2 import java.util.Map; 3 /登记式单例类. 4 /类似Spring里面的方法,将类名注册,下次从里面直接获取。 5 public class Singleton3 6 private static Map<String,Singleton3> map = new HashMap<String,Singleton3>(); 7 static 8 Singleton3 single = new Singleton3(); 9 map.put(single.getClass().getName(), single);10 11 /保护的默认构造子12 protected Singleton3()13 /静态工厂方法,返还此类惟一的实例14 public static Singleton3 getInstance(String name) 15 if(name = null) 16 name = Singleton3.class.getName();17 System.out.println("name = null"+"->name="+name);18 19 if(map.get(name) = null) 20 try 21 map.put(name, (Singleton3) Class.forName(name).newInstance();22 catch (InstantiationException e) 23 e.printStackTrace();24 catch (IllegalAccessException e) 25 e.printStackTrace();26 catch (ClassNotFoundException e) 27 e.printStackTrace();28 29 30 return map.get(name);31 32 /一个示意性的商业方法33 public String about() 34 return "Hello, I am RegSingleton." 35 36 public static void main(String args) 37 Singleton3 single3 = Singleton3.getInstance(null);38 System.out.println(single3.about();39 40

    注意事项

    本文(java单例模式详解.doc)为本站会员(asd****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开