`
FengShen_Xia
  • 浏览: 282140 次
  • 性别: Icon_minigender_1
  • 来自: 东方水城
社区版块
存档分类
最新评论

小谈单例模式

阅读更多

单例模式是一种常见的设计模式,它要保证全局只有一个实例,那为了保证这个最基本的条件,它必须提供静态的创建方法,作为一个引用.

那这里会出现很有趣的两种行为模式:饿汉式单例模式和懒汉式单例模式.

这两种方式有什么区别呢?

我们从辛辣面的BLOG里取它的例子来说明一下.

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


这个就是一个很常用的饿汉式单例模式,非常容易理解,也就是说只要客户端调用方法: Singleton.getInstance() 就可以使用这个实例,而且是唯一实例.这种使用方式丝毫没有什么限制,任何客户端只要使用该语句就必然可以创建实例.从JAVA语言来说这种方式是最能表现单例模式的了.

同样我们说明懒汉式单例模式仍然使用辛辣面的一个例子:

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


这也是一个单例模式,但是他和饿汉式有区别,它在创建时使用了线程标示 synchronized ,而且在创建时进行了

if (instance == null) {
       instance = new Singleton();
}

的判断.

这有什么用呢?

呵呵,稍微基础好一些的朋友应该一眼就看出来了,它在客户端调用时会有限制,也就是说不能在静态的客户端方法中对该单例类进行实例化.(当然 synchronized 是为了 if (instance == null) 而使用的)

其实说到底他们之间的区别也并不是很大,只是一个限制的问题,所以在使用该设计模式时从JAVA模式的角度,我是倾向于使用饿汉式.

在这里也稍微谈谈所谓的double-checked(双重检测),首先申明一下懒汉式并没有使用双重检测的技术,而双重检测是C++语言中的常用技巧之一,如果说它对懒汉式的改造,那就是将方法的标示 synchronized 去除,然后在方法体中判断 if (instance == null) 后使用 synchronized{} ,而在 synchronized{} 中再次对 if (instance == null) 进行判断,达到双重检测的目的.但是很可惜这个双重检测对JAVA的编译器不成立,因为 instance 的检测和对他的申明在时间上并没有严格的先后次序,所以编译器可能会先检测再申明而导致崩溃.

 

分享到:
评论

相关推荐

    浅谈Java中单例设计模式之构造方法私有化.pdf

    单例设计模式在Java中是一种广为应用的设计模式,它的核心在于将类的构造方法私有化,从而实现对类实例化过程的控制。这种模式确保了在一个应用程序中,某个类只能产生一个实例对象,有助于限制对象的数量,并且能够...

    C#面向对象设计模式纵横谈(9):Composite 组合模式(结构型模式)

    ### C#面向对象设计模式纵横谈之Composite组合模式解析 #### 标题解析与核心概念 标题中的“C#面向对象设计模式纵横谈(9):Composite组合模式(结构型模式)”明确了文章的主题聚焦于C#语言环境下的设计模式探讨,...

    二十三种设计模式【PDF版】

    于原著都是以C++为例, 以Java为例的设计模式基本又都以图形应用为例,而我们更关心Java在中间件等服务器方面的应用,因此, 本站所有实例都是非图形应用,并且顺带剖析 Jive论坛系统.同时为降低理解难度,尽量避免使用 ...

    浅谈我国新零售生鲜电商的发展模式——以盒马鲜生为例.zip

    本文将深入探讨新零售生鲜电商的发展模式,以国内知名的盒马鲜生为例,揭示其背后的创新策略与成功秘诀。 盒马鲜生作为阿里巴巴集团旗下的新零售品牌,它开创了“超市+餐饮+线上线下融合”的模式,实现了从农田到...

    移动互联网时代新零售企业审计模式的创新——基于瑞幸咖啡财务舞弊的案例分析.pdf

    然而在移动互联网时代,新零售企业转向了“人-货-场”的模式,强调消费者的中心地位,通过线上下单和线下配送等方式,实现商品和服务的有效结合。这种新型商业模式侧重于消费者信息的收集与分析,使用大数据、云计算...

    20051011--C#面向对象设计模式纵横谈(1):面向对象设计模式与原则

    以C#为例,这是一种优秀的支持面向对象编程的语言,它提供了多种级别的封装支持,支持单实现继承加上多接口实现,同时支持抽象方法和虚方法重写等功能。通过这些特性,C#使得开发者能够更容易地构建面向对象的系统。...

    基于电子CAD浅谈教学模式的革新.pdf

    以Protel 2004软件为例,它在印刷电路板制版方面具有强大的能力,但在电路仿真方面存在不足,因此,使用Multisim 7软件进行电路仿真成为了一种补充。Multisim 7作为一个功能强大、界面友好的电子电路仿真软件,不仅...

    设计模式新解23招,招招新鲜

    - **概念介绍**:解释为什么设计模式在软件开发中至关重要,以Singleton模式为例。 #### 5. 附录 - **关于设计模式的思考** - **个人感悟与思考**:分享作者在学习和实践中对设计模式的理解和思考,包括设计模式...

    浅谈并行编程中的任务分解模式.doc

    ### 浅谈并行编程中的任务分解模式 #### 一、引言 并行编程是一种通过利用计算机系统中多个处理器或核心的能力来提高程序执行效率的技术。为了有效地进行并行编程,开发人员需要掌握如何合理地分解任务,以便能够...

    以拼多多为例,浅谈从社交电商中另辟蹊径.rar

    这份“以拼多多为例,浅谈从社交电商中另辟蹊径”的行业报告,深入剖析了拼多多的成功之道,并探讨了社交电商的未来趋势。 一、拼多多的社交电商模式 1. 团购模式:拼多多的核心是团购,通过拼团的方式,让消费者...

    信息化-项目管理-基于BT模式的地铁项目管理研究.pdf

    - **深圳地铁五号线**:2007年开始建设,是深圳首例采用BT模式的特大型工程,也是当时国内最大的以BT模式建设的城市轨道交通项目。 - **南京地铁二号线**:同样采用了BT模式。 #### 三、BT模式应用中存在的问题 ...

    试谈互联网企业的管理及发展模式借鉴.pdf

    以小米为例,该公司从2010年成立到2019年登上《财富》世界500强榜单,仅用了9年时间,这在传统行业是难以想象的。 2. 扁平化管理,为员工赋能 扁平化管理是互联网企业普遍采用的一种管理方式,它意味着管理层级的...

    “小”微课 “大”能量——例谈计算机网络课程中微课的巧用.pdf

    教师应持续探索如何结合微课和其他教学手段,构建更有效的教学模式,以适应信息化时代的教育需求。同时,微课的设计和实施也需要教师具备一定的技术素养,以确保课程内容的准确性和吸引力。因此,专业指导和支持对于...

    培养探究能力 助推深度学习——例谈小学中高年级学生探究能力的培养.pdf

    吴国明在其文章《培养探究能力 助推深度学习——例谈小学中高年级学生探究能力的培养》中,深入探讨了如何通过培养学生的探究能力来促进深度学习,以及在这个过程中,教师可以采取哪些具体措施。 首先,文章强调了...

    例谈基于深度学习的高阶思维培育路径.pdf

    以生物学的“生物圈的水循环”实验为例,学生通过亲自观察和实验,不仅仅是看表面现象,而是需要分析、推理,提出问题。这样的过程能够激活学生的高阶思维,因为他们必须动用自己的分析、评价和创造性思维能力来完成...

    以建筑设计为例浅谈设计的地域与民族特色.docx

    以成都的民族建筑设计为例,我们可以深入探讨如何在现代建筑中融入地域特色和民族风格。 首先,我们需要理解建筑设计中的地域性和民族特色。地域性指的是建筑与特定地理位置的关系,包括气候、地形、自然资源等因素...

    浅谈中职机械CAD教学中信息化技术的运用——以摇臂的绘制为例.pdf

    在中职机械CAD教学中,以摇臂的绘制为例,教师可以通过使用三维动画、爆炸图等技术手段,将复杂的组合体拆分成易于理解的各个部分,帮助学生直观地认识和理解CAD图形,从而提高其空间思维能力。通过网络学习平台、...

    例谈信息技术及小学数学教学融合.doc

    在传统的教学模式中,练习往往局限于书本上的固定题目,而信息技术则能提供丰富多样的练习资源,包括互动游戏、在线测试等,使学生在娱乐中巩固知识。例如,教师可以设计不同难度级别的数学游戏,让学生在解决有趣的...

    例谈初中机器人大班教学的有效实施策略.pdf

    4. **双师教学模式**:大班教学中,两位教师的合作至关重要,一位主讲基础知识,另一位专注于实践指导,共同确保教学质量。在小组合作时,教师能及时反馈和指导,增强课堂管理。 5. **小组合作与任务单**:通过明确...

    让深度学习在科学探究中真实发生——苏教版《空气占据空间吗》教学例谈.pdf

    苏教版《空气占据空间吗》的教学例谈为我们提供了一个深度学习应用于科学探究的生动案例。 在科学探究中,深度学习强调的是学生主动参与和持续发展的学习过程。教师通过创造充满吸引力的探究场景,如实验情境和问题...

Global site tag (gtag.js) - Google Analytics