美文网首页Android设计模式:入门到精通
Android 设计模式入门到精通之一:单例模式(Singlet

Android 设计模式入门到精通之一:单例模式(Singlet

作者: 编程家园 | 来源:发表于2020-02-04 10:51 被阅读0次

单例模式(Singleton Pattern)

一、概念及技术背景

Ensure a class has only one instance, and provide a global point of access to it.确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

二、技术背景

单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:

1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。

2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。

3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。

三、代码实践

JDK: 

• java.lang.Runtime#getRuntime()

• java.awt.Desktop#getDesktop()

Android: (Thread-Safe demo codes)

1. 实现方式1:非延迟实例化(饥汉模式)

好处:实例对象在类加载过程中就会被创建,无需关注线程安全问题。

缺点:如果过多使用的饿汉单例,则会生产出过多的实例对象,无论你是否要使用他们。

public class CityInfoUtil {

    private static CityInfoUtil mInstance = new CityInfoUtil();

    /*私有构造,限制用户自行实例化*/

    private CityInfoUtil() {

    }

    public static CityInfoUtil getInstance() {

        return mInstance;

    }

}

2. 实现方式2:延迟实例化(饱汉模式)

好处:延时加载,用的时候才会生产对象。

缺点:需要保证同步,付出效率的代价。

public synchronized static WtContentProviderUtil getInstance(Context context) {

    if (mInstance == null) {

        mInstance = new WtContentProviderUtil(context);

    }

    return mInstance;

}

3. 实现方式3:延迟实例化(饱汉模式)的进阶方案:双重锁检查模式 --应弃用!

好处(本意):非空时,不需要再检查锁状态,提高效率

缺陷:双重检查锁定的问题是:并不能保证它会在单处理器或多处理器计算机上顺利运行。双重检查锁定失败的问题并不归咎于 JVM 中的实现 bug,而是归咎于 Java 平台内存模型。内存模型允许所谓的“无序写入”,这也是这些习语失败的一个主要原因。

public static WtContentProviderUtil getInstance(Context context) {

    if (mInstance == null) {

        /*双重检查加锁,减少使用同步*/

        synchronized(WtContentProviderUtil.class){

            if (mInstance == null) {

                mInstance = new WtContentProviderUtil(context);

            }

        }

    }

    return mInstance;

}

相关文章

  • Android 设计模式入门到精通之一:单例模式(Singlet

    单例模式(Singleton Pattern) 一、概念及技术背景 Ensure a class has only...

  • 设计模式

    设计模式简介 单例设计模式 问题:单例设计模式是什么?为什么要学它?怎么用它? 1.定义:单例模式(Singlet...

  • 单例模式(详解,面试问题)

    单例模式(从放弃到入门) @(设计模式) [TOC] 类图 简介 单例模式,可以说是设计模式中最简单的模式之一了,...

  • Android 设计模式之简单工厂模式

    设计模式系列文章 Android 设计模式之单例模式 Android 设计模式之Builder模式 Android...

  • Python 之单例模式

    简介:单例模式(Singleton Pattern) 是最简单的设计模式之一,属于创建型的设计模式。单例模式涉及到...

  • JAVA设计模式 - 单例模式

    JAVA设计模式 - 单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一...

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

  • 设计模式整理(2) 单例模式

    学习《Android 源码设计模式解析与实践》系列笔记 什么是单例 单例模式是应用最广,也是最容易理解的模式之一。...

  • 单例模式

    介绍 单例模式作为我们是日常开发中最常见的集中设计模式之一,也是很多刚入门的开发者最熟悉的设计模式。单例模式保证了...

  • 设计模式——单例模式

    设计模式——单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,这种类型...

网友评论

    本文标题:Android 设计模式入门到精通之一:单例模式(Singlet

    本文链接:https://www.haomeiwen.com/subject/tcxrxhtx.html