Android 单例模式

Android 单例模式:

设计模式: 是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结。它的目的:为了可重用代码,让代码更容易被别人理解,保证代码的可靠性。

单例模式:保证整个应用中某个实例(对象)有且只有一个。

类型:主要有饿汉式,懒汉式,同步懒汉式,双重检查锁式 ,内部类式。

1.饿汉式:加载类的时候就去创建实例了,即在没使用之前就创建好了实例,会带来一些性能上的问题(加载类的时候会慢一些,使用时快,由于它在使用之前就创建好实例,所以是线程安全的)。

/**
 * 饿汉式
 */
public class Singleton01 {
    // 1。私有化构造器
    
private Singleton01 () {
    }
    // 2.创建私有的静态实例
    
private static Singleton01 instance = new Singleton01();

    //3.提供静态的公共的方法供外部调用

    
public static Singleton01 getInstance () {
        return  instance;
    }
}

 

  2.懒汉式:在使用在去实例化对象。(线程不安全,当多个线程同时去创建实例就会出现问题)

/**
 * 懒汉式
 */
public class Singleton02 {
    // 1。私有化构造器
    
private Singleton02() {
    }
    // 2.声明私有的静态实例
    
private static Singleton02 instance  = null;

    //3.提供静态的公共的方法供外部调用
    
public static Singleton02 getInstance () {
        //当实例为空时才去创建
        
if (instance == null) {
            instance = new Singleton02();
        }
        return  instance;
    }
}

3.同步懒汉式:为解决懒汉式线程不安全的问题,我们可以使用同步,但是同步的代价必然会一定程度的使程序的并发度降低。(并发度表示,在一个时间点上,可能与服务端进行交互的用户的数量。

/**
 * 懒汉式
 */
public class Singleton03 {
    // 1。私有化构造器
    
private Singleton03() {
    }
    // 2.声明私有的静态实例
    
private static Singleton03 instance  = null;

    //3.提供静态的公共的方法供外部调用
    
public static Synchronized Singleton03 getInstance () {
        //当实例为空时才去创建
        
if (instance == null) {
            instance = new Singleton03();
        }
        return  instance;
    }
}

4.双重检查锁式:一是线程安全,二是保证程序的高并发度

public class Singleton04 {
    // 1。私有化构造器
    
private Singleton04() {
    }
    // 2.声明私有的静态实例
    
private static Singleton04 instance  = null;

    //3.提供静态的公共的方法供外部调用
    
public static Singleton04 getInstance () {
        //当实例为空时才去创建
        
   if(instance == null) {

         synchronzied(Singleton04.class) {

            Singleton temp = instance;

            if(temp == null) {

               temp = new Singleton04();

               instance = temp

            }

         }

      }

        return  instance;
    }
}

5.内部类式:利用Java机制,内部类只在getInstance()在第一次调用时才会去实例化一次

/**
 * 内部类式
 */
public class Singleton05 {
    private Singleton05 () {

    }
    private static class SingletonHolder {
        private  final static Singleton05 instance = new Singleton05();
    }
    
    public static Singleton05 getInstance(){
        return SingletonHolder.instance;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值