返回顶部
首页 > 资讯 > 精选 >Android如何实现单例模式
  • 943
分享到

Android如何实现单例模式

2023-06-15 04:06:02 943人浏览 独家记忆
摘要

这篇文章主要介绍了Android如何实现单例模式,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一.饿汉式public class SingletionSt

这篇文章主要介绍了Android如何实现单例模式,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一.饿汉式

public class SingletionStarving {    private static final SingletionStarving mInstance = new SingletionStarving();    private SingletionStarving() {    }    public static SingletionStarving getInstance() {        return mInstance;    }}
  • 构造函数用private修饰,外部无法访问

  • 声明静态对象时就初始化

  • static关键字修饰,静态变量,存储在内存中,只有一份数据。

  • final关键字,只初始化一次,所以mInstance实例只有一个。

二.懒汉式

public class SingletionSlacker {    private static SingletionSlacker mInstance;    private  SingletionSlacker() {}    public static synchronized SingletionSlacker getInstance() {        if (mInstance == null) {            mInstance = new SingletionSlacker();        }        return mInstance;    }}
  • 构造函数用private修饰,外部无法访问

  • 使用的时候即调用getInstance的时候才初始化

  • static关键字修饰,静态变量,存储在内存中,只有一份数据。

  • synchronized线程安全多线程情况下单例的唯一性

  • 缺点:没次调用getInstance都会同步一次,浪费资源

三.双重检查加方式

网上建议和使用最多的方法

public class Singletion {    private static Singletion mInstance;    private Singletion() {}    public static Singletion getmInstance() {        if (mInstance == null) {            synchronized (Singletion.class) {                if (mInstance == null) {                    mInstance = new Singletion ();                }            }        }        return mInstance;    }}
  • 构造函数用private修饰,外部无法访问

  • 使用的时候即调用getInstance的时候才初始化

  • static关键字修饰,静态变量,存储在内存中,只有一份数据

  • synchronized线程安全,多线程情况下单例的唯一性

  • 两次判断空,避免多次同步(synchronized)

缺点

private static Singletion mInstance;private Singletion() {}public static Singletion getmInstance() {}

由于JVM特性,允许乱序执行,上面三句代码顺序不定,那么就可能出现失效的问题。
步骤一、倘若A线程执行getmInstance(),还没执行构造方法Singletion()
步骤二、此时B线程调用getmInstance()。因为A已经执行getmInstance(),所以mInstance不为空就直接获取。
步骤三、由于B直接获取,而真实情况是A线程构造方法还未执行,所以mInstance就为空了。
虽然此情况发生概率较小,但也是一种情况。为了解决这种情况,java1.6开始加入volatile关键字

private volatile static Singletion mInstance;

这样就避免了方式失效的情况。虽然会volatile消耗一些性能,所以最佳写法

public class Singletion {    private volatile static Singletion mInstance;    private Singletion () {}    public static Singletion getmInstance() {        if (mInstance == null) {            synchronized (Singletion.class) {                if (mInstance == null) {                    mInstance = new Singletion();                }            }        }        return mInstance;    }}

虽然volatile让方式完美,但是没有volatile关键字的写法基本能满足绝大部分情况。除非你要运行在高并发,或者java1.6之前的代码中。

四.静态内部类方式

public class SingletionInternalClass {    private SingletionInternalClass() {}    public static SingletionInternalClass getInstance() {        return SingletionInternalClassholder.instance;    }    private static class SingletionInternalClassHolder {        private static final SingletionInternalClass instance = new SingletionInternalClass();    }}

构造函数用private修饰,外部无法访问

使用的时候即调用getInstance的时候才初始化

调用getInstance才回去加载SingletionInternalClassHolder类,确保了线程安全,保证了单例的唯一性

总结

单例模式不管用那种方式实现,核心思想都相同
1、构造函数私有化,通过一次静态方法获取一个唯一实例
2、线程安全

最后推荐使用文中**双重锁方式和静态内部类的方式**来创建单例模式。

Android是什么

Android是一种基于linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发

感谢你能够认真阅读完这篇文章,希望小编分享的“Android如何实现单例模式”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: Android如何实现单例模式

本文链接: https://lsjlt.com/news/277612.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android如何实现单例模式
    这篇文章主要介绍了Android如何实现单例模式,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一.饿汉式public class SingletionSt...
    99+
    2023-06-15
  • 如何实现单例模式
    本篇文章给大家分享的是有关如何实现单例模式,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。header("Content-type:t...
    99+
    2024-04-02
  • android单例模式怎么实现
    在Android中,可以通过以下几种方式实现单例模式:1. 懒汉式```javapublic class Singleton {pr...
    99+
    2023-08-23
    android
  • java单例模式如何实现
    本篇内容主要讲解“java单例模式如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java单例模式如何实现”吧!0x01 宫女请安在朕的后宫中,皇后当之无愧的是天下第一(朕只能当...
    99+
    2023-06-19
  • JavaScript如何实现单例模式
    小编给大家分享一下JavaScript如何实现单例模式,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!单例模式通过 ES6 的 Proxy 拦截构造函数的执行方法来...
    99+
    2023-06-27
  • PHP单例模式如何实现
    这篇文章主要介绍“PHP单例模式如何实现”,在日常操作中,相信很多人在PHP单例模式如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP单例模式如何实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-07-04
  • Android设计模式之单例模式实例
    目录一、概念1.1 单例类1.2 优缺点1.2.1 优点1.2.2 缺点二、创建单例模式的方法2.1 饿汉式2.2 懒汉式2.2.1 懒汉式(非线程安全)2.2.2 懒汉式(线程安全...
    99+
    2023-05-16
    Android单例模式 Android设计模式单例模式
  • 如何实现单例设计模式
    这篇文章主要讲解了“如何实现单例设计模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何实现单例设计模式”吧! 单例模式单例模式(Singleton Pattern)是 Java...
    99+
    2023-06-15
  • Java的单例模式如何实现
    这篇文章主要介绍“Java的单例模式如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java的单例模式如何实现”文章能帮助大家解决问题。什么是单例模式单例模式(Singleton Patter...
    99+
    2023-06-27
  • spring的单例模式如何现实
    在Spring中,有多种方式来实现单例模式: 默认的单例模式:Spring容器默认情况下会将所有声明为Bean的对象作为单例对象...
    99+
    2024-02-29
    spring
  • js单例模式如何实现模态框
    这篇文章给大家分享的是有关js单例模式如何实现模态框的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是单例呢?单,就是一个的意思。例:就是实例化出来的对象,那合在一起就是保证一...
    99+
    2024-04-02
  • Android 单例模式的四种实现方式
    目录一.饿汉式二.懒汉式三.双重检查加锁方式四.静态内部类方式总结一.饿汉式 public class SingletionStarving { private sta...
    99+
    2024-04-02
  • Java设计模式的单例模式如何实现
    这篇文章主要介绍了Java设计模式的单例模式如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java设计模式的单例模式如何实现文章都会有所收获,下面我们一起来看看吧。单例模式单例模式顾名思义就是单一的实例...
    99+
    2023-06-29
  • java设计模式中如何实现单例模式
    这篇文章将为大家详细讲解有关java设计模式中如何实现单例模式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。下面是一个简单的小实例://简单懒汉式 public class ...
    99+
    2023-05-30
    java
  • 如何使用Javascript实现单例模式
    这篇文章给大家分享的是有关如何使用Javascript实现单例模式的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。JavaScript是什么JavaScript是一种直译式的脚本语言,其解释器被称为JavaScri...
    99+
    2023-06-14
  • 在Python中如何实现单例模式
    本篇内容主要讲解“在Python中如何实现单例模式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“在Python中如何实现单例模式”吧!方法一:使用装饰器实现单例模式。from functools...
    99+
    2023-06-01
  • Python实现单例模式
    1.什么是单例? 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,单例模式是一种对象创建型模式。那么单例模式有什么用途呢?举个常见的单例模式例子,我们平时使用的电脑上都有一个回收站,在整个操作系统中,回...
    99+
    2023-01-31
    模式 Python
  • python3实现单例模式
    单例模式指确保某个类在整个系统中只存在一个实例的一种设计模式使用单例模式的好处:1、每个实例都会占用一定的内存资源,且初始化实例时会影响运行性能,所以当整个系统只需一个实例时,使用单例模式不仅可减少资源占用,而且因为只初始化一次,还可以加...
    99+
    2023-01-31
    模式
  • java中枚举如何实现单例模式
    java中枚举实现单例模式的方法:可以使用单元素枚举类型实现,语法格式:“public enum Singleton {INSTANCE; private Singleton() {}}”,一般情况下枚举里面创建实例是线程安全的。用法说明:...
    99+
    2024-04-02
  • go sync.Once如何实现高效单例模式
    这篇文章主要讲解了“go sync.Once如何实现高效单例模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“go sync.Once如何实现高效单例模式”吧!基本实现1...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作