博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java设计模式中的单例模式
阅读量:5134 次
发布时间:2019-06-13

本文共 1305 字,大约阅读时间需要 4 分钟。

  有时候在实际项目的开发中,我们会碰到这样一种情况,该类只允许存在一个实例化的对象,不允许存在一个以上的实例化对象,我们将这种情况称为Java设计模式中的单例模式。设计单例模式主要采用了Java的private和static关键字属性。单例模式又根据是否延迟加载实例过程分为懒汉式单例模式和饿汉式单例模式。

  例如下面理解一段符合单例模式的需求。假设人分为普通人和超人两种,地球上大多数都是普通人,而超人只有一个,我们在创建这两个实体类的时候就应该采用单例模式。下面是分别采用懒汉式和恶汉式单例模式的代码实现:

  懒汉式单例模式的实现:

1 class SuperMan3{
//懒汉式 2 private SuperMan3(){
//私有化构造器 3 4 } 5 public static SuperMan3 s3 = null; 6 public static SuperMan3 getInstance(){ 7 if(s3==null){ 8 s3 = new SuperMan3(); 9 }10 return s3;11 }12 }

饿汉式单例模式的代码实现:

1 class SuperMan4{
//恶汉式2 private SuperMan4(){
//私有化构造器3 4 }5 private static SuperMan4 s4 = new SuperMan4();6 public static SuperMan4 getInstance(){7 return s4;8 }9 }

可以看出,取名为懒汉式和饿汉式还是很生动的,具体懒汉式和饿汉式单例模式在线程安全和资源占用上还有很多的区别,这里就不详细说明了。然后验证一下是否这两个超人类满足单例模式,我们可以在主函数中创建两个实例,然后比较它们是否相等。

1      SuperMan3 s3 = SuperMan3.getInstance();2         SuperMan3 s33 = SuperMan3.getInstance();3         System.out.println(s3==s33);//true4         5         SuperMan4 s4 = SuperMan4.getInstance();6         SuperMan4 s44 = SuperMan4.getInstance();7         System.out.println(s4==s44);//true

输出的结果都是true,可以看出无论实例化了多少个实例,最终实例之间全是相等的,即只有一个实例,满足了单例模式的需求。

 

转载于:https://www.cnblogs.com/Echoer/p/4572668.html

你可能感兴趣的文章
前端留言板代码实例
查看>>
BZOJ4458: GTY的OJ
查看>>
BZOJ3073: [Pa2011]Journeys
查看>>
TCP三次挥手四次握手
查看>>
MYSQL基础八--子查询和连接
查看>>
webService客户端service方式搭建(四)
查看>>
初识HTML5
查看>>
思达报表工具Style Report基础教程—创建一个多数据块的联合(Union)、镜像(Mirror)...
查看>>
HNOI2019爆零记
查看>>
JSP 笔记
查看>>
Alpha、Beta、RC、GA版本的区别
查看>>
[NOI2019]序列
查看>>
iOS开发UI篇—常见的项目文件介绍
查看>>
SQL语句和EF Group by 用法
查看>>
vue 事件上加阻止冒泡 阻止默认事件
查看>>
Java多线程编程—锁优化
查看>>
异常处理
查看>>
1、微博RPC框架Motan
查看>>
bzoj 1217 [HNOI2003]消防局的设立 贪心
查看>>
虚拟继承C++
查看>>