Android设计模式之单例模式的七种写法

本文详细介绍了单例模式的定义、使用场景及其结构,并探讨了七种不同的Android单例模式实现方式,包括懒汉式、饿汉模式、DCL双重校验模式、静态内部类单例、枚举单例以及使用容器实现单例,强调了线程安全和防止反序列化创建新实例的重要性。
摘要由CSDN通过智能技术生成

一 单例模式介绍及它的使用场景

单例模式是应用最广的模式,也是我最先知道的一种设计模式,在深入了解单例模式之前,每当遇到如:getInstance()这样的创建实例的代码时,我都会把它当做一种单例模式的实现。其实经常使用的图片加载框架ImageLoader的实例创建就是使用了单例模式,因为这个ImageLoader中含有线程池、缓存系统、网络请求,很消耗资源,不应该创建多个对象,这时候就需要用到单例模式。

ImageLoader的创建代码如下:

ImageLoader.getInstance();// 在自己的Application中创建全局实例
.....
//getInstance()执行的源码
 public static ImageLoader getInstance() {
        if(instance == null) {
  //双重校验DCL单例模式
            Class var0 = ImageLoader.class;
            synchronized(ImageLoader.class) {
  //同步代码块
                if(instance == null) {
                    instance = new ImageLoader();//创建一个新的实例
                }
            }
        }
        return instance;//返回一个实例
    }

因此,在我们创建一个对象需要消耗过多的资源时,便可以考虑使用单例模式。

二 单例模式的结构图以及创建的关键点?

单例模式的定义是它应该保证一个类仅有一个实例,同时这个类还必须提供一个访问该类的全局访问点。如下图是单例模式的结构图:

这里写图片描述

实现单例模式有以下几个关键点:
(1)其构造函数不对外开放,一般为private;
(2)通过一个静态方法或者枚举返回单例类对象;
(3)确保单例类的对象有且只有一个,尤其要注意多线程的场景;
(4)确保单例类对象在反序列化时不会重新创建对象;

通过将单例类的构造函数私有化,使得客户端不能通过new的形式手动构造单例类的对象。单例类会主动暴露一个公有的静态方法,客户端调用这个静态的方法获取到单例类的唯一实例。在获取这个单例类的时候需要确保这个过程是线程安全的。

三 单例模式的七种实现方式

(1)懒汉式(线程不安全)
//懒汉式单例类.在第一次调用的时候实例化自己   
public class Singleton {  
    //私有的构造函数
    private 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值