Android设计模式之单例模式详解
程序员文章站
2023-11-29 09:03:58
单例模式
一个类只有一个实例,并且可以全局访问使用
应用场景
如账户管理类,数据库操作类等(某个对象频繁被访问使用)
常用方式
饿汉式
懒汉式
同步加锁
d...
单例模式
一个类只有一个实例,并且可以全局访问使用
应用场景
如账户管理类,数据库操作类等(某个对象频繁被访问使用)
常用方式
饿汉式
懒汉式
同步加锁
dcl双重加锁验证
静态内部类
枚举单例
饿汉式
加载类的同时立即进行初始化操作,对资源消耗很大
public class singletest { public static final singletest singletest1=new singletest(); public singletest() { } public static singletest getsingletest1(){ return singletest1; } }
懒汉式
优点:需要使用时候才进行初始化加载
缺点:线程不安全,在多线程中很容易出现不同步的情况
public class singletest1 { private static singletest1 instance=null; public singletest1() { } public static singletest1 getinstance(){ if(instance==null){ instance=new singletest1(); } return instance; } }
同步加锁
优点:解决线程安全问题
缺点:每次实例需要判断加锁状态,效率低下
public class singletest2 { private static singletest2 instance=null; public singletest2() { } public static synchronized singletest2 getinstance(){ if(instance==null){ instance=new singletest2(); } return instance; } }
dcl双重校验
优点:并发不高的情况下可以完美运行(推荐使用,客户端几乎不存在高并发情况)
缺点:jdk1.5以前可能会出现instance为初始化的问题(现在的android几乎都是1.7 1.8了几乎可以略率此问题)
public class singletest4 { private static singletest4 instance=null;//静态变量 public singletest4() { } public static singletest4 getinstance(){ if (instance == null) {//第一层校验 synchronized (singletest4.class) { if (instance == null) {//第二层校验 instance = new singletest4(); } } } return instance; } }
静态内部类
优点:延迟加载,线程安全,内存消耗少(推荐使用)
public class singletest5 { private singletest5() { } public static final singletest5 getinstance() { return singletonholder.instance; } //定义的静态内部类 private static class singletonholder { private static final singletest5 instance = new singletest5(); //创建实例的地方 } }
枚举单例
优点:线程安全,防反序列化,防反射,写法简单
public enum singletest6 { //第一种方式 // instance; // private caipiao instance; // // singletest6() { // instance = new caipiao(); // } // // public caipiao getinstance() { // return instance; // } // // class caipiao { // // } //第二种方式 instance2{ @override protected void caipiao() { system.out.println("彩票"); } }; protected abstract void caipiao(); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。