什么是单例模式?

定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例场景,也就是说:确保某个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源,或者某种类型的对象应该有且只有一个。

UML类图:

构建单例模式的关键:

1.构造函数不对外开放,一般为Private

2.通过一个静态方法或者枚举返回单例类对象

3.确保单例类的对象有且只有一个,尤其是多线程的环境下

4.确保单例类对象在反序列化时不会重新构建对象

单例模式构建方式:

1.饿汉模式

2.懒汉模式(Double Check)

3.静态内部类的单利模式

4.枚举单例模式

5.容器实现单例模式

代码示例:

1.饿汉模式

[java]

public class Singleton {

private Singleton(){

}

private static final Singleton Instance=new Singleton();

public Singleton getInstance(){

return Instance;

}

}

2. 懒汉模式(Double Check)

[java]

public class Singleton {

private Singleton(){

}

private static Singleton Instance=null;

public Singleton getInstance(){

if(Instance==null){

synchronized (Singleton.class) {

if(Instance==null)

{

Instance=new Singleton();

return Instance;

}

}

}

return Instance;

}

}

3.静态内部类单例模式

[java]

public class Singleton {

private Singleton(){}

private static Singleton getInstance(){

return SingletonHolder.Instance;

}

/**

* 静态内部类

*/

private static class SingletonHolder{

private static final Singleton Instance = new Singleton();

}

}

当第一次加载Singleton类时,并不会初始化Instance,只有在第一次调用Singleton的getInstance方法时,才会导致

Instance 被初始化。第一次调用 getInstance

方法会导致虚拟机加载SingletonHolder类,这种方式不仅能够确保线程安全,也能够保证单例对象的唯一性,同时也延迟了单例对象的实例化,所以推荐使用这种方法。

4.枚举单例

[java]

public enum SingletonEnum{

INSTANCE;

public void doSomething(){

System.out.println("do sth.");

}

}

5.使用容器实现单例模式

[java]

public class SingletonManager {

private static Map objMap = new HashMap();

private SingletonManager(){ }

//将多种单例类型注入到一个统一的管理类,在使用时根据key获取对象对应类型的对象

public static void registerService(String key, Object instance)

{

if(!objMap.containsKey(key)){

objMap.put(key, instance);

}

}

public static Object getService(String key){

return objMap.get(key);

}

}

这种容器单例模式的实现,在Android中,我们使用的Context的getSystemService(key)的方式,就是利用的容器单例模式。eg:WIndowsManagerService、ActivityManagerService等等。在虚拟机第一次加载该类时,会注册各种Service,这些服务以键值对的形式存储在一个HashMap中,用户使用时只需要根据key来获取到对应的具体服务对象了。

单例模式 java 例子_java单例模式实例相关推荐

  1. java利用单例模式存储参数_java单例模式使用及注意事项

    strtok函数实际上是要把第一个参数的字符串进行修改的.因为这个原因这个字符串的存储位置就不能是只读的, 也就是说不能存放在常量区.在使用char* aa ="abcdefg"; ...

  2. java单例模式的应用_java单例模式的简单应用例子

    单例模式:用于保证在程度的运行期间某个类有且只有一个实例 优势:在于尽可能节约资源 应用场景:还不太懂,希望懂的前辈们补充 -------------------- 通过修改构造方法的访问权限实现单例 ...

  3. java 单例模式双重检索_Java单例模式的双重检测

    1. 一般的单例模式如下: class Singleton{ private static Singleton singleton; private Singleton(){} public stat ...

  4. java编程的例子_java编程实例

    1:编写程序,判断给定的某个年份是否是闰年. 闰年的判断规则如下:(1)若某个年份能被4整除但不能被100整除,则是闰年.(2)若某个年份能被400整除,则也是闰年. import java.util ...

  5. java单列_Java 单例模式

    单例模式 保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 常见的应用场景: 任务管理器.回收站.网站的计数器.操作系统的文件系统.在servlet编程中,每个servlet也是单例模式,项 ...

  6. java的多态代码例子_java 多态实例代码

    多态是同一个行为具有多个不同表现形式或形态的能力.多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现,比如: 在现实中,我们按下F1键这个动作: 如果当前在Flash界 ...

  7. websocket java 例子_java 实现websocket的两种方式实例详解

    目录 一.介绍 1.两种方式,一种使用tomcat的websocket实现,一种使用spring的websocket 2.tomcat的方式需要tomcat 7.x,JEE7的支持. 3.spring ...

  8. java适配器模式例子_java适配器模式实例解析

    适配器模式作为一种结构型设计模式,在软件系统设计开发中使用到的频率非常之高,深受开发人员的青睐.本文会讲解适配器模式的知识要点,以及在实际项目中所使用的真实案例. 1.适配器模式概述: 适配器模式(A ...

  9. java单例模式7种_Java 单例模式的7种写法

    1.  懒汉(线程不安全) // 懒汉,线程不安全 public class Singleton { private static Singleton instance; private Single ...

  10. 单例模式java概括_单例模式中总有几个歪门邪道的问题要知道!

    前言 单例模式是一种应用很广泛的设计模式,提起关于他的问题,我们可以讨论到懒汉.饿汉.synchronized锁,volatile.以及如何做双重判断,以至于最后我们写出来的单例是这样的: publi ...

最新文章

  1. 【Linux网络编程】广播
  2. linux操作系统之线程
  3. 5kb大小的云洗衣机HTML源码 朋友圈在线洗衣服
  4. Transaction marked as rollbackOnly异常处理 Duplicate entry 'xxx' for key
  5. java 基础 泛型
  6. matlab软件进行仿真验证,matlab仿真软件
  7. 睡眠监测中的一些术语和指标(AASM)
  8. Python 与金融科技2|数据的滑动平均值及多图可视化
  9. 基础数据类型补充 set集合 深浅拷贝
  10. 广东省开展2022年省级制造业单项冠军企业(产品)培育遴选
  11. NO PANIC!2019: A Blockchain Odyssey 上海启航
  12. 网狐棋牌游戏平台服务器架构设计分析[转]
  13. 亚马逊产品该如何定价?这9种定价策略你一定要了解哦!
  14. abaqus html安装,abaqus 2016安装错误
  15. 4K Wallpaper HD Wallpapers for mac(4K壁纸软件)
  16. MapGIS地图导入
  17. 热评云厂商:软通动力7.93亿元,加速云业务创新升级
  18. python抓取国家统计局省市区街道社区数据
  19. 通过和resnet18和resnet50理解PyTorch的ResNet模块
  20. 传感器CE测试认证检测要求

热门文章

  1. KDE环境中文语言包安装问题
  2. 雨木林风linux系统,雨林木风开源系统下载-ylmf.os(雨林木风开源系统)v4.0 正式版 - 极光下载站...
  3. html右下角图片广告,HTML580用纯JS实现右下角广告代码
  4. 对讲机在哪插卡?插卡对讲机是什么意思呢?5000公里对讲机的哪点事
  5. ha linux 设置虚拟ip_配置双机HA - Linux下环境安装配置Rose HA全攻略(图)_数据库技术_Linux公社-Linux系统门户网站...
  6. 安装使用cuteFTP注意事项
  7. vm15 安装win11 预览版
  8. cocos creator人物动画切换控制
  9. 1213家中国厂商涌入拉斯维加斯!CES 2019最全预告在此...
  10. 7-5 鸡兔同笼 C++编程练习