Android设计模式(二)
来源:互联网 发布:淘宝手机宝贝链接在哪 编辑:程序博客网 时间:2024/05/21 18:49
单例模式:确保某个类只有一个实例,并且自行实例化并向整个系统提供这个实例。
使用场景:确保某个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源,如:要访问IO和数据库等资源。
懒汉模式:
public class CEO extends Staff { private static final CEO ceo =new CEO(); private CEO(){ } public static CEO getCeo(){ return ceo; } @Override public void work() { super.work(); }}恶汉模式:
public class Singleton { private static Singleton instance; private Singleton() { } public static synchronized Singleton getInstance(){ if (instance == null){ instance = new Singleton(); } return instance; }}优点:使用时才会被实例化,一定程度上节约了资源
缺点:第一次加载时需要及时进行实例化,反应稍慢,每次调用getInstance时都会进行synchronized,造成不必要的开销同步。
DoubleCheckLock(DCL):
public class Singleton { private static Singleton singleton = null; private Singleton(){ } public void doSomeThing(){ Log.e("doSomeThing--->","doSomeThing"); } public static Singleton getInstance(){ if (singleton == null){//避免不必要的同步 synchronized (Singleton.class){ if (singleton == null){//在instance为空的情况下创建实例 singleton = new Singleton(); } } } return singleton; }}假设线程执行到singleton = new Singleton()时,这句代码大概做了三件事:
a.给Singleton实例分配内存
b.调用Singleton的构造函数,初始化成员字段
c.将singleton的对象指向分配的内存空间(此时singleton就不再是null了)
优点:资源利用率高
缺点:第一次加载反应稍慢,由于java内存模型会导致失败(JDK1.5之前b和c的顺序是无法保证的),以及高并发情况下会有小概率的失败可能
静态内部类单例模式:
public class Singleton { private Singleton(){ } public static Singleton getInstance(){ return SingletonHolder.single; } private static class SingletonHolder{ private static final Singleton single = new Singleton(); }}确保线程安全,保证单例对象的唯一性,延迟了单例的实例化。
枚举单例:
public enum SingletonEnum { INSTANCE; public void doSomeThing(){ Log.e("doSomeThing--->","doSomeThing"); }}调用SingletonEnum.INSTANCE.doSomeThing();
使用容器实现单例模式:
public class Singleton implements Serializable{ private static final Long SerialVersionUid = 0L; private static final Singleton INSTANCE = new Singleton(); private Singleton(){ } public static Singleton getInstance(){ return INSTANCE; } private Object readResolve() throws ObjectStreamException{ return INSTANCE; }}
阅读全文
0 0
- Android设计模式(二)
- Android设计模式(二)- Builder模式
- Android常用设计模式(二)
- Android---MVP设计模式中级(二)
- 寻找android中的设计模式(二)
- [Android基础系列]设计模式(二)
- Android常用的设计模式(二)
- Android设计模式(二)- 续:WindowManager
- Android之mvp设计模式(二)
- Android设计模式(二)--策略模式
- 我的Android设计模式(二) 观察者模式
- Android设计模式之MVC模式(二)
- android设计模式之装饰模式(二)
- Android设计模式(二十)-装饰模式
- Android设计模式(二十一)-享元模式
- Android设计模式(二十二)-外观模式
- Android设计模式(二十三)-桥接模式
- 设计模式(二)
- mac版mysql更改初始密码
- MyBatis学习总结(五)——实现关联表查询
- java实现文本的选择性复制
- kafka集群监控之KafkaOffsetMonitor 0.4.1版本
- ProgressBar(进度条)
- Android设计模式(二)
- Python 命令行解析工具 Argparse介绍(二)
- Unreal Engine 4 C++ 创建对象的几种方法
- IntelliJ IDEA下的使用git
- [noip2016]换教室 题解
- 【笔记】纯晶体的凝固
- 借款产品比较
- Epic 官方视频教程《 Battery Collector》源码+超详细注释【C++】【UE4】
- Minesweeper [LeetCode 529]