Android设计模式之(1)----单例模式
来源:互联网 发布:淘宝上卖视频自动发货 编辑:程序博客网 时间:2024/06/06 21:51
单例模式
一个类只有一个实例,并且可以全局访问使用
应用场景
如账户管理类,数据库操作类等(某个对象频繁被访问使用)
常用方式
- 饿汉式
- 懒汉式
- 同步加锁
- 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();}
github代码地址
阅读全文
0 0
- Android设计模式之(1)----单例模式
- Android 设计模式 之 单例模式
- Android 设计模式 之 单例模式
- Android 设计模式之单例模式
- Android 设计模式 之 单例模式
- Android 设计模式 之 单例模式
- android设计模式之单例模式
- Android 设计模式 之 单例模式
- Android 设计模式之单例模式
- Android 设计模式之单例模式
- Android 设计模式之单例模式
- Android 设计模式 之 单例模式
- android 设计模式之单例模式
- Android 设计模式 之 单例模式
- Android 设计模式 之 单例模式
- Android 设计模式 之 单例模式
- android 设计模式之单例模式
- Android设计模式之单例模式
- Mysql存储过程案例
- 数据仓库建模-维度建模基础知识
- Redis基础
- oracle sql_plan 执行计划
- Day7-23.Mathematical operators
- Android设计模式之(1)----单例模式
- POJ
- Directshow 显示窗口未响应问题
- NC:MetaSort通过降低微生物群落复杂度以突破宏基因组组装难题
- 网易笔试:堆棋子
- IO流学习之小谈字节流和字符流
- 在windows下安装xgboost简易教程
- hdu 1850 Being a Good Boy in Spring Festival
- SpringBoot整合Mybatis之进门篇