• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > java 单例模式(饿汉模式与懒汉模式)

java 单例模式(饿汉模式与懒汉模式)

作者:lfdfhl 字体:[增加 减小] 来源:互联网 时间:2018-08-20

lfdfhl 通过本文主要向大家介绍了java单例模式,java,饿汉模式与懒汉模式等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

java 单例模式

饿汉式单例

对于饿汉模式,我们可这样理解:该单例类非常饿,迫切需要吃东西,所以它在类加载的时候就立即创建对象。

懒汉式单例类

对于懒汉模式,我们可以这样理解:该单例类非常懒,只有在自身需要的时候才会行动,从来不知道及早做好准备。它在需要对象的时候,才判断是否已有对象,如果没有就立即创建一个对象,然后返回,如果已有对象就不再创建,立即返回。

单例设计模式常用于JDBC链接数据库

注意:

1 我们常用的是第一种饿汉式,因为:

 (1)既然采用了单例设计模式,就是为了使用单例类的对象,所以就先把他实例化出来.

 (2)在懒汉式中存在一定的安全隐患,需要加上同步关键字synchronized,否则就谈不上单例了,但是加上了synchronized效率就稍逊了

2 在第一种办法中,代码private static final Single SINGLE=new Single();为什么有final呢?

因为被final关键字修饰的类,不能被继承,被final修饰的成员变量不可以被修改.

此处用了final为了强化和重点突出:"同一对象"这个概念——只有这么一个对象,而且它是不可以被修改的.

如果不用final修饰 Single SINGLE那么就会有这么一种情况:业务很复杂,在不经意间就修改了此对象,造成各种错误.

第一种(饿汉式):

思路:

(1)不让其他类建立该类的对象.即将构造函数设置为私有!
(2)自定义一个本类对象
(3)将自定义的对象提供出去.即定义一个get方法,返回值为此类的对象。

 分析:

 第一步:将单例类中构造函数私有化了且利用一个get()函数向外提供此类的对象,所以其他类无法构造此类的对象。
 第二步:但其他类要想调用此单例类里的方法,于是只有采用内名.方法名()来实现,这就要求这个方法必须是静态static的。
 第三步:又因为静态方法只能访问静态成员!所以要将SINGLE设置为静态的

public class SingleDemo { 
  public static void main(String[] args) { 
     Single s1=Single.getSingle(); 
     s1.setNumber(44); 
     Single s2=Single.getSingle(); 
     s2.setNumber(55); 
     System.out.println("s1.number="+s1.number); 
     System.out.println("s2.number="+s2.number); 
     if(s1.equals(s2)){ 
        System.out.println("s1与s2是同一对象即:s1==s2");//if条件成立 
       } 
   } 
} 
 
 
class Single{ 
  int number; 
  public int getNumber() { 
       return number; 
     } 
  public void setNumber(int number) { 
       this.number = number; 
     } 
  private Single(){};//第一步 
  private static final Single SINGLE=new Single();//第三步 
  public static Single getSingle(){//第一步和第二步 
       return SINGLE; 
  } 
} 

第二种(懒汉式):

package cn.com; 
public class SingleDemo2 { 
   public static void main(String[] args) { 
      Single s1=Single.getSingle(); 
      s1.setNumber(44); 
      Single s2=Single.getSingle(); 
      s2.setNumber(55); 
      System.out.println("s1.number="+s1.number); 
      System.out.println("s2.number="+s2.number); 
      if(s1.equals(s2)){ 
        System.out.println("s1与s2是同一对象即:s1==s2");//if条件成立 
       } 
     } 
 
 
} 
 
 
class Single{ 
   int number; 
   public int getNumber() { 
       return number; 
     } 
   public void setNumber(int number) { 
       this.number = number; 
     } 
   private Single(){}; 
   private static Single SINGLE=null; 
   public static synchronized Single getSingle(){//多线程时加上synchronized是关键!!! 
      if(SINGLE==null){ 
         SINGLE=new Single(); 
         return SINGLE; 
       } 
      else{ 
         return SINGLE; 
        } 
   } 
} 


以上就是对java 单例设计模式的详解,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • java 单例模式(饿汉模式与懒汉模式)

相关文章

  • 2017-05-11ASP.NET母版页基础知识介绍
  • 2017-05-11asp.net 中文字符串提交乱码的解决方法
  • 2017-05-11.NET Visual Studio 代码性能分析工具
  • 2017-05-11C#调用C++版本dll时的类型转换需要注意的问题小结
  • 2017-05-11ASP.net 页面被关闭后,服务器端是否仍然执行中?
  • 2017-05-11ASP.NET中Global和URLReWrite用法
  • 2017-05-11asp.net下数据库操作优化一例
  • 2017-05-11asp.net Silverlight中的模式窗体
  • 2017-05-11NopCommerce架构分析之(八)多语言支持
  • 2017-05-11C#实现把图片下载到服务器代码

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • ASP.NET配合jQuery解决跨域调用的问题
    • 在ASP.NET 2.0中操作数据之六十九:处理Computed Columns列
    • .net开发中几个重要的认识误区小结
    • ASP.NET书籍信息录入实现代码
    • asp.net下用js实现鼠标移至小图,自动显示相应大图
    • asp.net中一个linq分页实现代码
    • 开源跨平台运行服务插件TaskCore.MainForm
    • 用ASP.NET实现简单的文字水印
    • asp.net操作xml增删改示例分享
    • VB.NET设置屏幕分辨率、颜色位数、刷新率 实例代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有