当前位置: 首页 > news >正文

【JAVA】设计模式之懒汉式与恶汉式的单例模式实现的方法与详解

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

作者:程序员小冰,GitHub主页:https://github.com/QQ986945193
新浪微博:http://weibo.com/mcxiaobing

长期维护的Android项目,里面包括常用功能实现,以及知识点详解,
当然还有Java中的知识点。具体请看github:

https://github.com/QQ986945193/DavidAndroidProjectTools

好了,说正题
代码比较简单,非常基础,不过用处挺多的,针对做java或者android开发的小伙伴。
直接上代码吧,带有注释很详细:

package davidandroidprojecttools.qq986945193.com.davidandroidprojecttools.javaUtils;

/** * @author :程序员小冰 * @新浪微博 :http://weibo.com/mcxiaobing * @GitHub: https://github.com/QQ986945193 * @CSDN博客: http://blog.csdn.net/qq_21376985 * @交流Qq :986945193 * 类名:java中单例设计模式 恶汉式和懒汉式实现方法 */
public class Singleton {
//
// /**
// * 恶汉式 加载类的时候比较慢,运行比较快
// */
//
// private static Singleton instance = new Singleton();
//
// /**
// * 1,定义私有的构造方法,禁止外部直接创建实例
// * <p/>
// * 2,内部自己创建好实例,私有属性(不建议在外部直接调用我们的成员变量)
// * <p/>
// * 3,创建一个方法,使外部可以得到此实例
// */
// private Singleton() {
//
// }
//
//
// public static Singleton getSingletonInstance() {
// return instance;
// }


    /** * 懒汉式 加载类的时候比较快,运行时比较慢 * <p/> * 1,创建私有构造方法,禁止外部直接创建实例 * <p/> * 2,创建私有变量实例化对象,私有属性(不建议在外部直接调用我们的成员变量) * <p/> * 3,创建方法,使外部可以调用我们的私有对象实例 */

    private static Singleton instance = null;

    private Singleton() {

    }

    /** * 这样也是可以的,不过,如果涉及到多线程,最好加上一个同步锁(synchronized),可以 * <p/> * 直接在方法上添加 但是每次都要去进行同步,显然不是最好的。 * * 最好的当然是下面的,在方法中进行加上synchronized * @return */
    public static Singleton getInstance() {

        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {

                    instance = new Singleton();
                }
            }
        }
        return instance;
    }


// public static synchronized Singleton getInstance() {
// if (instance == null) {
// instance = new Singleton();
// }
// return instance;
// }


}

转载于:https://my.oschina.net/mcxiaobing/blog/776996

相关文章:

  • asp.net定时任务
  • 14. Html5的局:WebGL的纹理格式
  • Tomcat编译jsp生成Servlet文件的存放位置
  • Android事件总线(三)otto用法全解析
  • 反思总结然后整装待发
  • 当SetTimeout遇到了字符串
  • ABP文档 - EntityFramework 集成
  • [Java基础] Java中List.remove报错UnsupportedOperationException
  • 查看linux服务器的系统信息
  • sql事务、视图和索引
  • 谈谈springmvc的ResponseBodyAdvice
  • C语言之从内存角度理解不同类型的变量
  • Android 利用线程运行栈StackTraceElement设计Android日志模块
  • .Net中ListT 泛型转成DataTable、DataSet
  • linux线程的实现【转】
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • AWS实战 - 利用IAM对S3做访问控制
  • Java 23种设计模式 之单例模式 7种实现方式
  • Laravel 实践之路: 数据库迁移与数据填充
  • Solarized Scheme
  • SpriteKit 技巧之添加背景图片
  • SQLServer插入数据
  • Swoft 源码剖析 - 代码自动更新机制
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 从0实现一个tiny react(三)生命周期
  • 计算机常识 - 收藏集 - 掘金
  • 开源SQL-on-Hadoop系统一览
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 一个SAP顾问在美国的这些年
  •  一套莫尔斯电报听写、翻译系统
  • 转载:[译] 内容加速黑科技趣谈
  • ​iOS安全加固方法及实现
  • # C++之functional库用法整理
  • #define与typedef区别
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (SpringBoot)第七章:SpringBoot日志文件
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (生成器)yield与(迭代器)generator
  • (十) 初识 Docker file
  • (四)Linux Shell编程——输入输出重定向
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)scrum常见工具列表
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET MVC第三章、三种传值方式
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .NET成年了,然后呢?
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [ C++ ] 继承
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429