【Android进阶】设计模式------Singleton单例的几种实现方式
来源:互联网 发布:qt tcp客户端编程 编辑:程序博客网 时间:2024/05/29 07:50
写在开头的几句话:
无论什么时候都觉得自己的技能不足,毕业半年,之后进了一家创业公司,公司前景不是很好,而且略有拖工资,最主要是觉得自己学不到东西。正好赶上有空闲的时间,就看了看很多大神写的博客,记得博客上写的一句话,一个程序员要从自身做起,少范低级错误,少出BUG,做一个高水平的工程师,而不是天天Debug的码农。
我想我是爱这行的,所以啊,加油吧,程序员君。
单例模式
•使用场景
•实现方式
使用场景
我也用过很多次单例,每一次用,无非就是要用到的这个类很耗内存,很耗时间,所以也就没必要new多个这个类的对象,所以单例应该是用在这几种形式上的。
实现方式
单例的实现起来应该简单的很,查资料过后,也就是几个关键点:
1.最重要的是构造函数的private。
2.通过一个静态方法或者枚举返回单例对象。
3.多线程环境下要确保单例对象依然只有一个。
4.反序列化过后的singleton依然是序列化之前的singleton(挺拗口)。
讲道理的话,3、4是我没查资料之前都忽略了的,应该也是单例中较难的点。
好了废话不多说,上代码吧
拿LOL说事情吧,LOL的商店只能有一个吧,无论是谁用都是用那个商店
并且在几个英雄同时操作商店的时候,也就是多线程的时候,商店也只能有一个。
public class LOLStore { private static LOLStore store = null; private ArrayList<HashMap<String, Integer>> ADWeaponList;//AD武器列表 private ArrayList<HashMap<String, Integer>> APWeaponList;//AP武器列表 private HashMap<String, Integer> weaponMap; //武器 //私有的构造函数; private LOLStore() { } //懒汉式 public static LOLStore getStore() { if (null == store) { store = new LOLStore(); } return store; } private void addWeapon() { ADWeaponList = new ArrayList<>(); APWeaponList = new ArrayList<>(); weaponMap = new HashMap<>(); weaponMap.put("无尽之刃", 3600); ADWeaponList.add(weaponMap); weaponMap.put("卢登的回声", 3200); APWeaponList.add(weaponMap); } public ArrayList showADWeapon() { return ADWeaponList; }}
然后是英雄类,拿大盖伦说事情
public class LOLGaren { //英雄盖伦想要用商店 public static void main(String[] args) { LOLStor.getStore().showADWeapon(); }}
然后一个简单的单例就写完了,用的是懒汉式
几种单例的常见形式
DCL:
private static volatile LOLStore store = null; //DCL式: public static LOLStore getStore() { if (null == store) { synchronized (LOLStore.class) { if (store == null) { store = new LOLStore(); } } } return store; }
静态内部类:
//静态内部类式: public static LOLStore getStore() { return SingltonHolder.store; } //内部类 private static class SingltonHolder{ private static final LOLStore store = new LOLStore(); }
还有枚举和饿汉式,我就不写了,我感觉枚举的用不到,饿汉式又太简单,还有一种形式是容器模式,这种形式在源码中看到过,用到了Map<>,这个在分析源码的时候再写吧。
上面的很多内容都是通过查资料得到的,其中出自《Android源码设置模式》一书中。
- 【Android进阶】设计模式------Singleton单例的几种实现方式
- 单例模式singleton的几种实现方式
- Singleton Pattern (单例or单件模式)的几种实现方式
- 创建单例模式(Singleton)的几种方式
- 设计模式之(Singleton)单例模式的几种实现
- 常用设计模式-单例的几种实现方式
- JAVA设计模式-单例模式(Singleton)的五种实现方式
- 单例模式(singleton pattern)的几种实现
- Singleton单例模式 几种实现的优劣
- java实现单例singleton的几种模式
- Singleton模式的几种实现方式
- singleton模式的几种实现方式
- 单例模式的三种实现方式:singleton
- 单例模式--Singleton的两种实现方式
- singleton pattern(单件模式)的几种实现方式
- 设计模式——单例模式的几种实现方式
- 设计模式—单例模式的几种实现方式
- Android设计模式-单例模式(Singleton)
- 第16周项目1-验证算法(4)快速排序
- 第16周项目3-归并排序算法的改进
- 一路学习做站SEO 站长生涯也就此开始
- 第十六周-项目一 验证算法(5)
- 第16周-项目1—直接插入排序
- 【Android进阶】设计模式------Singleton单例的几种实现方式
- 排序算法之插入排序
- 【BZOJ1095】捉迷藏,动态点分治
- 第十五周项目4—直接插入排序
- 【第十六周 项目1 (1)—冒泡排序】
- angular2.0装饰器祥解
- 英语作文模板
- Android FrameWork——Touch事件派发过程详解
- 使用C#访问VBA,发布到IIS后出现以下错误,按此博文已解决问题