《Android 源码设计模式解析与实战》——第2章,第2.5节单例模式的简单示例
2023-09-11 14:17:37 时间
本节书摘来自异步社区《Android 源码设计模式解析与实战》一书中的第2章,第2.5节单例模式的简单示例,作者 何红辉 , 关爱民,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.5 单例模式的简单示例
单例模式是设计模式中比较简单的,只有一个单例类,没有其他的层次结构与抽象。该模式需要确保该类只能生成一个对象,通常是该类需要消耗较多的资源或者没有多个实例的情况。例如,一个公司只有一个CEO、一个应用只有一个Application对象等。下面以公司里的CEO为例来简单演示一下,一个公司可以有几个VP、无数个员工,但是CEO只有一个,请看下面示例。
示例实现代码 package com.dp.example.singleton; // 普通员工 public class Staff { public void work() { // 干活 // 副总裁 public class VP extends Staff { @Override public void work() { // 管理下面的经理 // CEO,饿汉单例模式 public class CEO extends Staff { private static final CEO mCeo = new CEO(); // 构造函数私有 private CEO() { // 公有的静态函数,对外暴露获取单例对象的接口 public static CEO getCeo() { return mCeo; @Override public void work() { // 管理VP // 公司类 public class Company { private List Staff allStaffs = new ArrayList Staff public void addStaff(Staff per) { allStaffs.add(per); public void showAllStaffs() { for (Staff per : allStaffs) { System.out.println("Obj : " + per.toString()); public class Test { public static void main(String[] args) { Company cp = new Company() ; // CEO对象只能通过getCeo函数获取 Staff ceo1 = CEO.getCeo() ; Staff ceo2 = CEO.getCeo() ; cp.addStaff(ceo1); cp.addStaff(ceo2); // 通过new创建VP对象 Staff vp1 = new VP() ; Staff vp2 = new VP() ; // 通过new创建Staff对象 Staff staff1 = new Staff() ; Staff staff2 = new Staff() ; Staff staff3 = new Staff() ; cp.addStaff(vp1); cp.addStaff(vp2); cp.addStaff(staff1); cp.addStaff(staff2); cp.addStaff(staff3); cp.showAllStaffs(); }
输出结果如下:
Obj : com.android.dp.book.chapter2.company.CEO@5e8fce95 Obj : com.android.dp.book.chapter2.company.CEO@5e8fce95 Obj : com.android.dp.book.chapter2.company.VP@8b3 Obj : com.android.dp.book.chapter2.company.VP@222d10 Obj : com.android.dp.book.chapter2.company.Staff@1aa488 Obj : com.android.dp.book.chapter2.company.Staff@3dfeca64 Obj : com.android.dp.book.chapter2.company.Staff@22998b08
从上述的代码中可以看到,CEO类不能通过new的形式构造对象,只能通过CEO.getCEO()函数来获取,而这个CEO对象是静态对象,并且在声明的时候就已经初始化,这就保证了CEO对象的唯一性。从输出结果中发现,CEO两次输出的CEO对象都是一样的,而VP、Staff等类型的对象都是不同的。这个实现的核心在于将CEO类的构造方法私有化,使得外部程序不能通过构造函数来构造CEO对象,而CEO类通过一个静态方法返回一个静态对象。
Android内存缓存LruCache源码解析 内存缓存,使用强引用方式缓存有限个数据,当缓存的某个数据被访问时,它就会被移动到队列的头部,当一个新数据要添加到LruCache而此时缓存大小要满时,队尾的数据就有可能会被垃圾回收器(GC)回收掉,LruCache使用的LRU(Least Recently Used)算法,即: strong 把最近最少使用的数据从队列中移除,把内存分配给最新进入的数据。 /strong
不知道如何看Android源码?试试这几种方式~ Android这个是一个**庞大的系统性**的工程,各个版本都有一定兼容性问题,为了能快速定位问题,也为了学习Android框架中一些优秀的思想,时常需要查看Android系统源码层面的知识。
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
相关文章
- [Android]中文API(三)android.account包下的那些类
- Android源码解析--AlertDialog及AlertDialog.Builder
- [Android Pro] android中permission_group与permisson区别、作用
- (转)Android学习进阶路线导航线路(Android源码分享)
- Android获取内置sdcard跟外置sdcard路径
- 《android开发艺术探索》读书笔记(十一)--Android的线程和线程池
- 《Android源码设计模式》--模板方法模式
- 《Android源码设计模式》--策略模式
- 《Android源码设计模式》--抽象工厂模式
- 《Android源码设计模式》--工厂方法模式
- 《Android源码设计模式》--原型模式
- Android解析JSON速度对比
- OpenGL—Android 开机动画源码分析一
- 《Android源码设计模式》--模板方法模式
- 《Android源码设计模式》--状态模式--责任链模式--解释器模式--命令模式--观察者模式--备忘录模式--迭代器模式
- 《Android源码设计模式》--工厂方法模式
- 《Android源码设计模式》--原型模式
- 【Android源码解析】“Retrofit、Okhttp、ButterKnife、Glide....”等百大框架源码,Android开发进阶必备宝典
- android开发分享Android中外接键盘的检测的实现
- Android Recovery 源码解析和界面定制
- android 源码自带原生demo
- android 面试算法题 打印金字塔三角形和三个线程顺序打印
- Android系统源码的整编和单编
- Android 下拉刷新组件SwipeToLoadLayout源码解析
- android 自定义控件 使用declare-styleable进行配置属性(源码角度)
- android camera(一):camera模组CMM介绍
- Android Studio引入源码(Android7.0+)framework.jar
- Android 自定义EditText,有输入时右边显示删除按钮,没有输入时隐藏