zoukankan      html  css  js  c++  java
  • 应用最广的模式——单例模式

    一、介绍

      单例模式是应用最广的模式之一,在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个全局对象,这样有利于我们协调系统整体的行为。

    二、定义

      确保某一个类只有一个实例,而且自行实例并向整个系统提供这个实例。

    三、使用场景

      确保某个类有且只有一个对象的场景避免产生多个对象消耗过多的资源,或者某种类型的对象只应该有且只有一个。

    四、UML类图

     

    五、简单示例

      

    六、其他实现方式

      懒汉模式

      Double Check Lock(DCL)实现单例

      静态内部类单例模式(推荐使用)

      枚举单例

      使用容器实现

    七、Android源码中的单例模式

      以LayoutInflater为例

    八、无名英雄:深入理解LayoutInflater

      

    九、运用单例模式

      

    十、总结

      单例模式的优点

        1.由于单例模式在内存中只有一个实例,减少了内存开支,特别是一个对象需要频繁地创建、销毁时,而且创建或销毁对象时性能又无法优化,单例模式的优势就非常明显。

        2.由于单例模式只生成一个实例,所以,减少了系统的性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个实例对象,然后用永久驻留内存的方式来解决。

        3.单例模式可以避免对资源的多重占用,例如一个写文件操作,由于只有一个实例存在内存中,避免对同一个资源文件的同时写操作。

        4.单例模式可以在系统设置全局的访问点,优化和共享资源访问,例如,可以设计一个单例类,负责所有数据表的映射处理。

      缺点

        1.单例模式一般没有接口,扩展很困难,若要扩展,除了修改代码基本上没有第二种途径可以实现。

          2.单例对象如果持有 Context,那么很容易引发内存泄漏,此时需要注意传递给单例对象的Context最好是Application Context。

  • 相关阅读:
    宿主机( win 7 系统) ping 虚拟机VMware( cent os 6.6 ) 出现“请求超时”或者“无法访问目标主机”的解决方法
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
  • 原文地址:https://www.cnblogs.com/jesonjason/p/5552318.html
Copyright © 2011-2022 走看看