美文网首页
编程设计模式01——单例模式

编程设计模式01——单例模式

作者: 小刘灰灰 | 来源:发表于2019-12-05 13:49 被阅读0次

1.单例模式定义在Android中的使用

单例模式在项目中唯一持久存在的模式,而且为整个系统提供这个实例。处理一些全局多次相同处理方式的任务。

2.单例模式的分类

2.1 最简单的饿汉式单例
package com.example.testlibary;

public class Singleton {
    private static final Singleton SINGLETON = new Singleton();
    //自己实现私有构造方法,无法生成多个实例对象
    private Singleton() {
    }
    //通过该方法获取实例  存在的问题项目在初始化的该实例就会存在  
   //如果不用的话会存在资源的浪费
    public static Singleton getSingleton() {
        return SINGLETON;
    }
}
2.2 懒汉式
public class Singleton {
    //不加final 加了就不能初始化了
    private static Singleton singleton = null;

    private Singleton() {
    }

    //这个是线程不安全的 项目中能存在多个 Singleton的实例
    public static Singleton getSingleton() {
        if (singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }
}
加锁的懒汉式线程式安全的。
    //不加final 加了就不能初始化了
    private static Singleton singleton = null;

    private Singleton() {
    }

    //synchronized  加上一个锁 线程安全的
    //存在问题是     
    public static  synchronized Singleton getSingleton() {
        if (singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }
}
更加高级的懒汉式线程安全的
public class Singleton {
    // 4DCL模式(双重检查锁定模式)
    //volatile 内存同步共享修饰  线程安全的
    //可见性。对一个 volatile 变量的读,总是能看到(任意线程)对这个 volatile 变量最后的写入。
    //原子性:对任意单个 volatile 变量的读 / 写具有原子性,但类似于 volatile++ 这种复合操作不具有原子性。
    private static volatile Singleton singleton = null;

    private Singleton() {
    }

    //synchronized  加上一个锁 线程安全的
    //存在问题是     
    public static Singleton getSingleton() {
        synchronized (Singleton.class) {
            if (singleton == null) {
                singleton = new Singleton();
            }

        }
        return singleton;
    }
}

volatile关键字能够保证可见性,被volatile修饰的变量,在一个线程中被改变时会立刻同步到主内存中,而另一个线程在操作这个变量时都会先从主内存更新这个变量的值。
关于类锁,对象锁的问题自行百度吧,在单例中区别不大

3.个人推荐使用的单例模式 静态内部类的模式

public class Singleton {

    private Singleton() {
    }
    public Singleton getInstance(){
        return SingleTonHolder.singleton;
    }

    private static class SingleTonHolder {
        private  final static Singleton singleton=new Singleton();
    }
}

4.还有一种是枚举的单例模式这个不是很常用的。

public enum  SingleTonA {
    SINGLETONA;
    //添加自己需要的操作
    public void method(){
    }

}
5.单例应该在使用时应该注意的地方

持有Activity对象或者Content对象,导致当前Activity等无法释放,造成的内存泄漏的问题。(context泄漏)。

相关文章

  • 编程设计模式01——单例模式

    1.单例模式定义在Android中的使用 单例模式在项目中唯一持久存在的模式,而且为整个系统提供这个实例。处理一些...

  • python中OOP的单例

    目录 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 单例

    目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • python 单例

    仅用学习参考 目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计...

  • 单例模式

    2020.01.10 晚 22:01 问题 我们从下面3个问题去对单例模式进行探讨 为什么需要单例模式? 单例模式...

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • 11月_c++单例模式的几种写法

    0x01 单例模式简介 单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只...

  • 设计模式 - 单例模式

    设计模式 - 单例模式 什么是单例模式 单例模式属于创建型模式,是设计模式中比较简单的模式。在单例模式中,单一的类...

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

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

网友评论

      本文标题:编程设计模式01——单例模式

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