笔者记得去面试时曾被问起这个模式,当时还没有看过设计模式,对设计模式基本上一无所知,不过可以肯定的是笔者用过单例模式。当时回答的风马牛不相及,很尴尬。

也是从那时起,开始学习设计模式。今天所说的就是单例模式,有很多时候,我们希望类只能实例化一次。例如我们经常使用的Method等就是最典型的单例模式。当然很多框架中也是有单例模式。

先看下类图:

大话设计模式-类图

单例模式分为懒汉式和饿汉式。先看下笔者的demo。

/*** 饿汉式*/
public class SingleDemo {private static SingleDemo singleDemo = new SingleDemo();private SingleDemo() {}public static SingleDemo getInstance() {return singleDemo;}
}

/*** 懒汉式*/
public class SingleDemo2 {private static SingleDemo2 singleDemo2 = null;private SingleDemo2() {}public static SingleDemo2 getInstance() {if (null == singleDemo2) {synchronized (SingleDemo2.class) {if (null == singleDemo2) {return singleDemo2 = new SingleDemo2();}}}return singleDemo2;}
}

/*** 内部类 懒汉式*/
public class SingleDemo3 {private SingleDemo3() {}private static class SingleHold {private static SingleDemo3 singleDemo3 = new SingleDemo3();}public static SingleDemo3 getInstance() {return SingleHold.singleDemo3;}
}

/*** 客户端*/
public class Test {public static void main(String[] args) {SingleDemo singleDemo = SingleDemo.getInstance();SingleDemo singleDemo1 = SingleDemo.getInstance();System.out.println(singleDemo == singleDemo1);SingleDemo2 singleDemo2 = SingleDemo2.getInstance();SingleDemo2 singleDemo21 = SingleDemo2.getInstance();System.out.println(singleDemo2 == singleDemo21);SingleDemo3 singleDemo3 = SingleDemo3.getInstance();SingleDemo3 singleDemo31 = SingleDemo3.getInstance();System.out.println(singleDemo3 == singleDemo31);}
}

运行结果:

true
true
true

这三者笔者推荐大家使用内部类形式,三者的区别网上很多,笔者偷下懒给大家一个地址:http://www.cnblogs.com/coffee/archive/2011/12/05/inside-java-singleton.html

以上,希望能帮助学习单例模式的小伙伴。

转载于:https://www.cnblogs.com/zhuxiansheng/p/8043634.html

java 之 单例模式(大话设计模式)相关推荐

  1. java 装饰模式(大话设计模式)

    装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活. 装饰模式把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象,因此,当需要执行特殊行为时,客户代 ...

  2. 【大话设计模式】设计模式系统学习大合集

    转载请注明出处:http://blog.csdn.net/column/details/designpatternbylmb.html 为了方便各位网友学习以及方便自己复习之用,将设计模式的系列内容按 ...

  3. java思想 设计模式 《大话设计模式》知识总结

    本文大部分内容来自<大话设计模式>. java很适合多人协作,但代码量很大. 与其抱怨需求总是变化,不如改变开发过程,从而更有效地应对变化.面向对象就是为了解决变化的问题. 文章目录 1. ...

  4. 单例模式的实现-懒汉模式【大话设计模式之爱你一万年:单例模式:我的女朋友只有你一个】

    2.单例模式的实现-懒汉模式 视频学习地址  -- <大话设计模式之爱你一万年>:https://dwz.cn/wqO0MAy7 这一节我们先来看看一种实现模式,懒汉模式,这也是这么中实现 ...

  5. 大话设计模式、UML、设计模式Java版完全总结

    此篇博客为阅读大话设计模式后的笔记记录( 读完本文>≈读完<大话设计模式> ),注意是笔记形式,优先适合于对设计模式有一定了解的读者,希望短时间快速温习的读者,同时也对所有设计模式添 ...

  6. 《大话设计模式(C#实现)》(Yanlz+VR云游戏+Unity+SteamVR+云技术+5G+AI+设计模式+GoF+UML+单例模式+观察者模式+抽象工厂+代理模式+框架编程+立钻哥哥++OK+)

    <大话设计模式(C#实现)> 版本 作者 参与者 完成日期 备注 YanlzFramework_GoF_V01_1.0 严立钻 2020.02.10 ##<大话设计模式(C#实现)& ...

  7. 大话设计模式之爱你一万年:第二章 创建型模式:单例模式:我的女朋友只有你一个:2.单例模式的实现-懒汉模式

    2.单例模式的实现-懒汉模式 视频学习地址  -- <大话设计模式之爱你一万年>:https://dwz.cn/wqO0MAy7 这一节我们先来看看一种实现模式,懒汉模式,这也是这么中实现 ...

  8. 大话设计模式java解读

    大话设计模式 各个模式包括:需求 + 各个实现版本 简单工厂 策略模式 装饰者模式 代理模式 工厂模式 原型模式 模板设计模式 各个模式包括:需求 + 各个实现版本 简单工厂 实现两数的加减乘除 无脑 ...

  9. java 之 解释器模式(大话设计模式)

    在软件的世界里存在着翻译机,只不过在软件中我们称之为解释器.在系统中如果某一特定类型的问题在频繁的发生,此时我们就有必要将这些问题的实例表述为一个语言中句子, 因此可以构建一个解释器,然后利用该解释器 ...

最新文章

  1. 顺序查找的基本原理及实现
  2. FileNameFilter过滤器的使用和Lambda优化程序
  3. jquery-ajax-jsonp-360搜索引擎的联想词获取
  4. [实战]java回调函数
  5. 炫龙dd2——黑苹果10.14 Clover EFI文件共享
  6. 企业网中nextcloud与iRedmail邮件系统的配合
  7. cocos creator 全局变量的几种方法
  8. 关于视频播放的断点续传实现(.NET)
  9. Xcode6 打包报错 ITMS-90096
  10. Linux系统Word转换PDF,文档字体乱码不显示问题解决。
  11. uni-app个人中心
  12. laravel faker 数据填充
  13. 【转】委外加工的核算流程
  14. 如何使用SOLIDWORKS绘制外螺纹线?
  15. Docker全环境操作手册(更新中)
  16. 【G4基础08】GPS-2-Macro Commands宏命令
  17. linux电脑开机进不了系统更新失败,电脑卡在配置Windows Update失败界面无法开机怎么办...
  18. springboot 整合 MongoDB 实现登录注册,html 页面获取后台参数的方法
  19. 一种SpaceClaim抽取流道的方法——利用缺失的面功能
  20. mysql查询emoji_mysql怎么搜emoji?

热门文章

  1. PAT 1082. 射击比赛 (20) - 乙级
  2. PAT 1067. 试密码(20)-乙级
  3. 【软件项目管理】里程碑事件的定义
  4. 【数据库】E-R图向关系模型转换的规则
  5. mac双击文件打不开——设置鼠标连按速度
  6. 1025. 反转链表 (25)-浙大PAT乙级真题
  7. java小例子mysql_Java 访问MySQL的小例子
  8. 原生js双向数据绑定
  9. jQuery常用工具方法
  10. 【Java编程】建立一个简单的JDBC连接-Drivers, Connection, Statement and PreparedStatement