Android单例模式
来源:互联网 发布:python量化投资 pdf 编辑:程序博客网 时间:2024/05/06 17:31
最近几天抽空阅读了<<Android源码设计模式>>中单例模式,下面是我的阅读笔记.
单例模式就是在有的类中避免产生多个对象消耗过多的资源,必须保证只有一个实例存在,例如访问I/O和数据库等资源类.
实现单例模式主要有如下几个关键点:
1.构造函数不对外开放,一般为private
2.通过一个静态方法或者枚举返回单例类对象
3.确保单例类的对象有且只有一个,,尤其是在多线程huanjingxia
4.确保单例类对象在反序列化时不会从新构建对象.
下面是几种单例的demo:
</pre><pre name="code" class="java">/** * 饿汉式: */public class SingleTon0 { private SingleTon0() { } private static final SingleTon0 single = new SingleTon0(); public static SingleTon0 getInstance() { return single; }}/** * 懒汉式,优点:单例只有在使用时才会被实例化,在一定程度上节约了资源; * 缺点:第一次加载时需要及时进行实例化,反应稍慢,每次调用getInstance都进行同步,造成不必要的同步开销 */class SingleTon1 { private SingleTon1() { } private static SingleTon1 single; public static synchronized SingleTon1 getInstance() { if (null == single) { single = new SingleTon1(); } return single; }}/** * DCL模式 * 优点:既能节省资源又能保证线程安全,且单例对象初始化后调用getInstance不进行同步锁 * 缺点:第一次加载时反应稍慢,也由于java内存模型的原因偶尔会失败. */class SingleTon2 { private SingleTon2() { } private static SingleTon2 single; public static SingleTon2 getInstance() { if (null == single) { synchronized (SingleTon2.class) { if (null == single) { single = new SingleTon2(); } } } return single; }}class SingleTon3 { private SingleTon3() { } public static SingleTon3 getInstance() { return SingleTonHolder.instance; } /** * 静态内部类 * 优点:线程安全,保证单例唯一,同时延迟了单例的实例化,解决了DCL单例模式的缺点 */ private static class SingleTonHolder { private static final SingleTon3 instance = new SingleTon3(); }}/** * 枚举类 */enum SingleTon4 { INSTANCE; public void doSomething() { System.out.print("do thing"); }}/** * 单例对象管理类 * 将多种单例类对象存放入单例管理类中同意管理,使用时通过key获取与之相对应的对象,他对用户隐藏了具体实现,降低了耦合度. */class SingletonManager { private static Map<String, Object> obj = new HashMap<>(); private SingletonManager() { } public static void registerService(String key, Object instance) { if (!obj.containsKey(key)) { obj.put(key, instance); } } Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); } }; public static Object getInstance(String key) { return obj.get(key); }}
0 0
- android 单例模式!
- android 单例模式
- Android 单例模式
- android单例模式
- Android 单例模式
- android 单例模式
- Android单例模式
- Android--单例模式
- android单例模式
- android 单例模式
- Android单例模式
- Android单例模式
- android 单例模式
- android单例模式
- android 单例模式
- Android单例模式
- Android 单例模式
- Android 单例模式
- 我的Git配置文件 .gitconfig
- Hadoop中HDFS的常用命令
- Java获取package下所有的class对象(普通文件包和Jar文件包)
- 数据库多表连接查询
- 算法竞赛入门经典第二版第三章习题
- Android单例模式
- 三分法模板
- 百度地图 使用两条平行线表示路线
- codeforces 688 E. The Values You Can Make
- 标准 C 库
- MySQL安装到最后出现问题的解决方法
- java高仿2048游戏代码
- Qt:Exception at 0xeefde9, code:0x0000005: read access violation at: 0x0, flags = 0x0(first chance)
- java中的路径包含空格问题