1. 说明

1)单例模式:确保一个类只有一个实例,自行实例化并向系统提供这个实例

2)单例模式分类:饿单例模式(类加载时实例化一个对象给自己的引用),懒单例模式(调用取得实例的方法如getInstance时才会实例化对象)(java中饿单例模式性能优于懒单例模式,c++中一般使用懒单例模式)

3)单例模式要素:

a)私有构造方法
b)私有静态引用指向自己实例
c)以自己实例为返回值的公有静态方法

2.实例

饿单例模式:

复制代码 代码如下:

package com.wish.modedesign;

public class HungrySingleton {
    private static HungrySingleton instance  = new HungrySingleton();
    private HungrySingleton(){
    }
    public static HungrySingleton getInstance(){
        return instance;
    }
}

懒单例模式:

复制代码 代码如下:

package com.wish.modedesign;

public class Singleton {
    private Singleton(){

}
    private static Singleton instance;
    public static synchronized Singleton getInstance(){   //多线程时注意线程安全
        if(instance == null){
            instance = new Singleton();
        }
        return instance;
    }
}

测试类Driver.java

复制代码 代码如下:

package com.wish.modedesign;

public class Driver {
    public static void main(String[] args) {
        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        System.out.println(s1==s2);   //true
    }

}

3.优点和适用场景

1)单例模式的优点:

在内存中只有一个对象,节省内存空间。
避免频繁的创建销毁对象,可以提高性能。
避免对共享资源的多重占用。
可以全局访问。
2)适用场景:

需要频繁实例化然后销毁的对象。
创建对象时耗时过多或者耗资源过多,但又经常用到的对象。
有状态的工具类对象。
频繁访问数据库或文件的对象。
4.使用时注意事项

1)使用时不能用反射模式创建单例,否则会实例化一个新的对象

2)使用懒单例模式时注意线程安全问题

3)饿单例模式和懒单例模式构造方法都是私有的,因而是不能被继承的,有些单例模式可以被继承(如登记式模式)

转载于:https://www.cnblogs.com/gaopeng527/p/5290759.html

java单例模式使用及注意事项相关推荐

  1. java 单例方法,java单例模式使用及注意事项

    1. 说明 1)单例模式:确保一个类只有一个实例,自行实例化并向系统提供这个实例 2)单例模式分类:饿单例模式(类加载时实例化一个对象给自己的引用),懒单例模式(调用取得实例的方法如getInstan ...

  2. Java单例模式个人总结(实例变量和类变量)

    Java单例模式 背景知识:Static关键字. 在对于定义类的变量,分为两种,是否具有static修饰的变量: 没有static修饰的变量,通过类的实例化(对象)引用,改变量称为实例变量: 使用st ...

  3. java异常及日志注意事项

    java异常及日志注意事项 参考文章: (1)java异常及日志注意事项 (2)https://www.cnblogs.com/lq147760524/p/8475531.html 备忘一下.

  4. 关于 调用 JNI JAR java 的说明和注意事项,调用第 靠写不下了

    关于 调用 JNI JAR java 的说明和注意事项,调用第 靠写不下了

  5. Java 单例模式探讨

    以下是我再次研究单例(Java 单例模式缺点)时在网上收集的资料,相信你们看完就对单例完全掌握了 Java单例模式应该是看起来以及用起来简单的一种设计模式,但是就实现方式以及原理来说,也并不浅显哦. ...

  6. Java单例模式优化写法

    转载自 http://blog.csdn.net/diweikang/article/details/51354982 Java单例模式优化写法 方法一:推荐 [java] view plain co ...

  7. 写java代码时的注意事项_从方法返回Java 8的可选项时的注意事项

    写java代码时的注意事项 Java 8引入的Optional类一直是该语言版本引入的最具争议的功能之一. 尽管我喜欢这个新的Java类的东西比不喜欢的东西多,但在Java方法中将其用作return类 ...

  8. Java单例模式的几种实现方式

    Java单例模式的几种实现方式 在Java 中,单例类只能有一个实例,必须创建自己的唯一实例,单例类必须给所有其他对象提供这一实例.Java 单例模式有很多种实现方式,在这里给大家介绍单例模式其中的几 ...

  9. java 上传文件注意事项

    java 上传文件注意事项 1.文件名有特殊字符的情况,所以最好是文件名前台url编码,后台再url解码,这点在下载的时候也一样 2.文件大小一定要设置,spring boot 有默认. 3.文件名校 ...

最新文章

  1. java 远程登陆windows_使用Windows身份验证,JAVA连接到远程MSSQL
  2. 公开课-C++学习路线实战导引:从0开始到操作系统内核开发
  3. springmvc 自定义view支持json和jsonp格式数据返回
  4. 项目中引入composer包
  5. 1282B1. K for the Price of One (Easy Version)
  6. 上海1.3万座玻璃幕墙建筑“一网统管”
  7. java string能存储多长_String 有多长?
  8. 证券投资深度学习_安信证券:“深度学习”开启新一轮计算模式变革
  9. 商汤押注AI教育,成立“商汤教育”子品牌
  10. URAL 1992 CVS 可持久化链栈
  11. (centos6.5)MySQL服务安装
  12. SonarLint 默认扫描规则
  13. android 左移动画_android 动画Animation之TranslateAnimation移动
  14. python复制excel图片_python批量导出excel区域图片
  15. Simon Knowles:30年做成三家独角兽公司,AI芯片创业的底层逻辑
  16. python求周长_计算任何三角形的周长[python 3]
  17. 无语的index hint:手工分配哈希区,5小时不出结果,优化后20分钟
  18. fMRI数据分析处理原理及方法fMRI数据分析处理原理及方法
  19. 数据结构实践(有的数据结构课后习题答案),红色是答案
  20. 【开餐馆】 动态规划

热门文章

  1. 基于DeepLabV3+与U-Net融合的黄瓜叶片病害严重程度分类方法
  2. 一种大豆多种病害自动识别的新方法
  3. 基于图像处理技术的柑橘病害自动检测与分类
  4. 【java】变量的应用
  5. pythonmysqlconnector_python操作mysql——mysql.connector
  6. pil python 安装_Python实现识别人脸特征并打印出来!
  7. 中文命名实体识别,HMM,CRF,BiLSTM,BiLSTM+CRF的具体实现
  8. 【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类...
  9. 数据挖掘-文本特征提取方法研究
  10. poj 1191 棋盘分割(记忆化dp+递归)