• Android设计模式之单例模式


    定义

    单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例 。

    单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需 要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),因为让 类的实例去生成另一个唯一实例毫无意义。

    其又分为三种形式

    饿汉式

    //只有内部类可以为static。
    public class SingIn{
        //在自己内部定义自己的一个实例,只供内部调用
        private static final SingIn instance = new SingIn();
        private SingIn(){
        }
        //这里提供了一个供外部访问本class的静态方法,可以直接访问
        public static SingIn getInstance(){
            return instance;
        }
    }

    懒汉式

       /***
         * 一种常用的形式
         */
        private static SingIn instance = null; 
        public static synchronized SingIn getInstance() {         
          // 这个方法比上面有所改进,不用每次都进行生成对象,只是第一次  
          // 使用时生成实例,提高了效率!  
           if (instance == null)  
                  instance = new SingIn();  
                  return instance;  
        }  

    双重锁式

    //将同步内容下方到if内部,提高了执行的效率,不必每次获取对象时都进行同步,只有第一次才同步,创建了以后就没必要了。 
    private static volatile SingIn instance=null;
     private SingIn (){
     
     }
     public static  SingIn getInstance(){
        if(instance==null){
          synchronized(SingIn .class){
          if(instance==null){
            instance=new SingIn ();
           }
          }
         }
        return instance;
      }

    使用方式,直接调用getInstance()方法即可得到对象。

    优点

    实例控制:Singln 会阻止其他对象实例化其自己的 Singln 对象的副本,从而确保所有对象都访问唯一实例

    灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程

    缺点

    开销:虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销,可以通过使用静态初始化解决此问题。

    可能的开发混淆:使用 Singln 对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用 new 关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。

    对象的生存期:Singln 不能解决删除单个对象的问题。

  • 相关阅读:
    go 算法之插入排序算法 running
    Go多协程并发环境下的错误处理 running
    go 协程控制之sync.Once{} running
    php 生成指定范围内不重复的随机数 running
    php 正则函数preg_replace_callback running
    go 算法之冒泡算法 running
    googleStyle
    ubuntu搭建APT源简单方法
    request.getParameterMap()快速转化为bean
    多线程编程CountDownLatch和CyclicBarrier
  • 原文地址:https://www.cnblogs.com/zhangqie/p/6408388.html
Copyright © 2020-2023  润新知