单例模式是指在应用程序的运行周期内,一个类始终只有一个实例,不论在何处访问都是如此。

一般单例模式有两种形式。

1、通过私有构造器实现

定义一个类构造器为private,有一个private的static变量,初始化的时候实例化;通过一个public的GetInstance方法获取对象的引用。

public class Singleton  {      private Singleton (){}      private static Singleton instance  = new Singleton();      public static Singleton GetInstance()      {           return instance;      }  }

这种方式又称“饿汉模式”,它在初始化时就生成好了实例,可以避免生成不必要的实例。因此这一种是线程安全的。但是它的缺点是不论是不是要使用这个实例,只要引用了,都把这个实例生成好了,造成了资源的浪费;同时对实例化机制的控制少,因为有的时候,会使用这个类的非默认构造器来执行其他任务,而不想造成资源不必要的占用。

2、使用的时候生成

这种方式也是通过public的静态GetInstance方法来获取对象,但是在获取的时候判断后才实例化。

public class Singleton  {      private  static Singleton instance=null;      public static Singleton GetInstance()      {          if(instance==null)              instance=new Singleton();          return instance;      }  }

这种方式解决了第一种方式的缺点,由于它是在使用时生成,又称为“懒汉模式”。当然这种实现方式对于多线程来说又有一个问题,多线程访问时会生成好几个实例。因此要改进它,使用lock防止这种现象。

public class Singleton  {      private readonly object synlock = new object();       private  static Singleton instance=null;      public static Singleton GetInstance()      {          if(instance==null)             {                 lock(synlock)                  {                       instance = new Singleton;                   }             }          return instance;      }  }  

这就是两种常见的单模式实现。

读书笔记4:单例模式相关推荐

  1. Java读书笔记(8)-单例模式

    Java读书笔记(8)-单例模式 今天在阅读<Effective Java 2>第3条时,获知一种使用枚举enum实现单例模式的新方法,然而书上并没有就此展开深入说明,于是上网查阅了一些资 ...

  2. 大话设计模式读书笔记之单例模式

    1.定义: 保证一个类只有一个实例,并提供一个访问它的全局的访问点. 通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象.一个最好的办法就是,让类自身负责保存它的唯一实例.这个 ...

  3. javascript设计模式(javascript设计模式与开发实践读书笔记)

    javascript设计模式(javascript设计模式与开发实践读书笔记) 单例模式 策略模式 代理模式 迭代器模式 发布-订阅模式 命令模式 组合模式 模板方法模式 享元模式 职责链模式 中介者 ...

  4. 《Java并发编程实践-第一部分》-读书笔记

    大家好,我是烤鸭: <Java并发编程实战-第一部分>-读书笔记. 第一章:介绍 1.1 并发历史: 多个程序在各自的进程中执行,由系统分配资源,如:内存.文件句柄.安全证书.进程间通信方 ...

  5. 《代码整洁之道 Clean Architecture》-读书笔记

    大家好,我是烤鸭: 关于<代码整洁之道>,记录一下读书笔记. 代码整洁之道 第一章 整洁代码 整洁代码的艺术 第二章 有意义的命名 避免误导 有意义的区分 使用读得出来和可搜索的名字 避免 ...

  6. 《大话设计模式》读书笔记-索引

    <大话设计模式>读书笔记-第1章 简单工厂模式 <大话设计模式>读书笔记-第2章 策略模式 <大话设计模式>读书笔记-第3章 单一职责原则 <大话设计模式&g ...

  7. 《Java多线程编程核心技术》读书笔记

    为什么80%的码农都做不了架构师?>>>    <Java多线程编程核心技术>读书笔记. ###第一章 Java多线程技能 使用Java多线程两种方式. 继承Thread ...

  8. JAVA WEB整合开发王者归来 -- 读书笔记 by CZF 完整版

    JAVA WEB整合开发王者归来 -- 读书笔记  目录 第1章 概述. 1 第2章 搭建web开发环境. 1 第3章 Servlet技术. 1 第4章 深入JSP技术. 7 第5章 会话跟踪. 12 ...

  9. Android开发艺术探索读书笔记(一)

    首先向各位严重推荐主席这本书<Android开发艺术探索>. 再感谢主席邀请写这篇读书笔记 + 书评.书已经完整的翻完一遍了,但是还没有细致的品读并run代码,最近有时间正好系统的把整本书 ...

  10. [读书笔记]Effective C++ - Scott Meyers

    [读书笔记]Effective C++ - Scott Meyers 条款01:视C++为一个语言联邦 C++四个次语言: 1. C Part-of-C++,没有模板.异常.重载. 2. Object ...

最新文章

  1. 2017吉首大学新生赛
  2. 计网 - HTTP 协议_强制缓存和协商缓存的区别
  3. C++Jump Search跳转搜索的实现算法(附完整源码)
  4. java hashmap value_Java HashMap values() 方法
  5. Linux-/proc目录简介
  6. api 微信内置浏览器js_多端开发框架uni-app入坑指南,一套代码适用微信、头条等小程序...
  7. 远程管理口怎么看地址_红烧羊肉怎么样做才能滋味浓郁,咸甜适口,且回味有奶香?看这里...
  8. Python装饰器总结,带你几步跨越此坑!
  9. 2018安卓应用安全白皮书:超98%安卓应用存有安全风险
  10. win7专业版 .bat脚本运行_IT运维老司机:聊聊BAT批处理提升工作效率
  11. 牛客网2018多校第一场J题
  12. Node.js之Stream可读流readable
  13. 二叉树的inorder实现:递归、栈、Morris遍历
  14. JAVA流程图——主要用于循环
  15. HTML:Marked-js+Bootstarp简单实现Markdown文本编辑器
  16. php手机页面中文输出乱码,如何解决php输出中文乱码的问题?
  17. 开源数据库postgreSQL13在麒麟v10sp1源码安装
  18. 通过简单实例讲解QQ开放平台登录原理
  19. L13 操作系统的这棵树
  20. 容灾是什么意思?容灾基础知识介绍

热门文章

  1. 【转载】python学习之 字符串前'r'的用法
  2. iOS指示器之UIProgressView和UIPageControl
  3. Hibernate 事务总结
  4. Linux系统服务器如何禁ping
  5. 点击屏幕上EditText区域以外的任何地方隐藏键盘的解决方法
  6. Exchange 2013 合规性管理之日记规则
  7. linux下如何察看哪个进程在写硬盘
  8. java B2B2C 源码 多级分销Springcloud多租户电子商城系统(十)用spring Restdocs创建API文档...
  9. 【Android必备】与其他碎片进行通信(10)
  10. Android Studio一直build、一直refreshing、一直buiding gradle project into的终极解决办法...