1、Singleton单例模式,是一种责任型模式。这种模式,通过隐藏构造器和提供对创建对象的单个访问点,实现了将类的职责---创建一个担当着独一无二角色的对象(生产唯一实例),集中于类的单个实例中。

2、它的宗旨:确保某个类只有一个实例,并且为之提供一个全局访问点。

3、它的机制:将该单例对象作为单例类的一个静态域创建实例;显示提供唯一的私有构造器(注意,必须显示提供,否则使用者仍然会调用系统提供的默认构造器来实例对象);提供一个具有公有访问属性的静态方法,利用它获取该类的唯一实例。

4、初始化实例的两种时机:

<wbr><wbr><wbr>提前创建单例对象----申明该单例对象的静态域时创建实例;</wbr></wbr></wbr>

<wbr><wbr> 滞后初始化----------在第一次使用该单例对象的时候再创建实例。滞后实例化单例对象的两个理由:也许在静态初始化时间,你没有关于如何初始化单例对象的足够信息;也许为了等待资源,诸如数据库连接,尤其是在某些特定会话中不需要这个单例的应用程序中。</wbr></wbr>

5、多线程环境中确保创建唯一实例:使用属于当前类的锁进行同步,即使用锁机制来协调不同线程中多个方法的运行。因为我们无法保证,在多线程环境中,一个方法能够持续运行到结束,其它线程的方法才开始运行。此外,我们也应该在多线程环境中,应用这个同步机制,来限制对单例对象内部数据的访问。

6、该模式或许是最负盛名的模式,但由于我们很容易误用它,因此不要轻易使用。不要让Singleton模式成为创建全局变量的唯一方式。注意,如果是想创建供测试用的子类,它可能不是最合适的,因为并不只有一个实例。

7、示例:

public class Singleton{

<wbr><wbr><wbr> private static Singleton<wbr>instance;</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr> privage static Object classLock = Singleton.class;</wbr></wbr></wbr>

<wbr><wbr><wbr> private int count;</wbr></wbr></wbr>

<wbr><wbr><wbr> private Singleton(){</wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> count = 0;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr> }</wbr></wbr></wbr>

<wbr><wbr><wbr> public static Singleton getInstance(){</wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> synchronized(classLock){</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> if(instance == null){</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> instance = new Singleton();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> }</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> return instance;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> }</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr> }</wbr></wbr></wbr>

<wbr><wbr><wbr> public void recordCount(){</wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> synchronized(classLock){</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> count++;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> }//注意:此处也需要做同步,我们无法保证,不会有两个以上线程同时操作此count属性。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr> }</wbr></wbr></wbr>

}

设计模式学习之--Singleton(单例)模式相关推荐

  1. javascript设计模式-singleton(单例)模式

    singleton(单例)模式被熟知的原因是因为它限制了类的实例化次数只能一次,单例模式,在该实例不存在的勤快下,可以通过一个方法创建一个类来实现创建类的新实例:如果实例已经存在,则会简单返回该对象的 ...

  2. Javascript设计模式学习二(单例)

    定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点 普通的单例模式: 使用一个变量来标记当前是否已经为某个类创建过对象,如果是的话,在下一次获取该类的实例时,直接返回之前创建的对象. 比如:使 ...

  3. 12Singleton(单例)模式

    技术交流QQ群:1027579432,欢迎你的加入! 1.对象性能模式 面向对象很好地解决了抽象的问题,但是必不可免地要付出一定的代价.对于通常情况来说,面向对象的成本大都可以忽略不计.但是某些情况, ...

  4. Ruby设计模式透析之 —— 单例(Singleton)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8868758 此为Java设计模式透析的拷贝版,专门为Ruby爱好者提供的,不熟悉R ...

  5. 【设计模式】-创造篇-单例

    单例定义 单例模式(Singleton)是一种非常简单且容易理解的设计模式.顾名思义,单例即单一的实例,确切地讲就是指在某个系统中只存在一个实例,同时提供集中.统一的访问接口,以使系统行为保持协调一致 ...

  6. 设计模式是什么鬼(单例)

    转自:设计模式是什么鬼(单例) 之前我们讲过面向对象以及封装.继承.多态三大特性,底子打好了那我们就把设计模式一个个拆开来看看到底都是神些什么鬼,我们先从简单的单例说起吧.单例,顾名思义,整个系统其实 ...

  7. java饿汉式有啥作用,Java面试 - 什么是单例设计模式,为什么要使用单例设计模式,如何实现单例设计模式(饿汉式和懒汉式)?...

    什么是单例设计模式? 单例设计模式就是一种控制实例化对象个数的设计模式. 为什么要使用单例设计模式? 使用单例设计模式可以节省内存空间,提高性能.因为很多情况下,有些类是不需要重复产生对象的.如果重复 ...

  8. 设计模式学习笔记——享元(Flyweight)模式

    设计模式学习笔记--享元(Flyweight)模式 @(设计模式)[设计模式, 享元模式, flyweight] 设计模式学习笔记享元Flyweight模式 基本介绍 享元案例 类图 实现代码 Big ...

  9. 设计模式学习笔记——中介者(Mediator)模式

    设计模式学习笔记--中介者(Mediator)模式 @(设计模式)[设计模式, 中介者模式, Mediator] 设计模式学习笔记中介者Mediator模式 基本介绍 中介者案例 类图 实现代码 Me ...

最新文章

  1. ql的python学习之路-day10
  2. 设计模式理解:模板方法
  3. 现在已经到了考虑云计算的时候
  4. 教师使用计算机职责,教师办公室计算机使用制度
  5. JDK1.7的HashMap的put(key, value)源码剖析
  6. js浏览器页面生命周期
  7. 决策树(四)--随机森林与GBDT
  8. 当vue遇到pwa--vue+pwa移动端适配解决方案模板案例
  9. 制造业数字化转型-项目案例合集
  10. 移动前端开发与WEB前端开发有什么联系与区别?
  11. html箭头轮播,CSS-用伪类制作小箭头(轮播图的左右切换btn)
  12. 计算机二级北京工业大学耿丹学院官网,北京工业大学耿丹学院
  13. 开源软路由和防火墙pfSense
  14. win10应用商店无法连接到服务器出错,win10应用商店无法连接网络的具体解决方法...
  15. 开淘宝店怎么注册公司?开淘宝店是否需要去工商局登记注册公司
  16. UE4 材质笔记之水洼(贴花)
  17. 支持GB28281协议的远程抓拍4G低功耗摄像头解决方案
  18. dell刀片服务器 重启 维护,已解决: dell 刀片服务器内网网络问题 - Dell Community
  19. el-table闪动问题
  20. 什么是图灵机及图灵完备(一)

热门文章

  1. U盘分区与启动是怎么回事?
  2. MySql的事务操作与演示样例
  3. web 页面table 斜线效果 跨越多行和 多列
  4. 5.3Python数据处理篇之Sympy系列(三)---简化操作
  5. 存储网络与存储系统架构分析
  6. jquery.zclip轻量级复制失效问题
  7. 关于C中字符串的输入和输出使用的函数不同所造成的影响
  8. 一对电话线传输100M带宽不再是问题
  9. EXCEL 制作万年历
  10. 这个星期压力貌似比较大啊!