前言
又来梳理知识点啦!
在有的时候我们要多次使用某个类中的公有实例方法,我们通常的做法是,先new一个该类的实例,然后再调用该类的这个方法,调用完毕后这个类也就变成垃圾。这种调用方式如果出现的频率很高,会在对象生成和内存占用上浪费很多的资源,一个对象的创建和销毁是很占资源的。
于是,伟大的程序员们想到一个好办法,尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。经典的享元模式中,是使用一个map来存储对象,相当于是一个对象工厂,客户端每次都从享元对象工厂中获取对象。
定义
使用共享对象可有效的支持大量的细粒度对象
使用场景
系统中存在大量的相似对象
对象没有特定的身份,状态都较接近
需要缓冲池的场景
使用方法
享元模式是一种思想,一种避免多次重复创建对象的编程思想。
我们主要是要创建一个享元工厂,来生产我们的享元类。这样的享元工厂有N种写法,我们常见的是使用map来构造享元工厂,来看一个享元工厂的demo
Android中的享元模式应用
应用的话,若我说,我们编写的ViewHolder都可以归类为享元工厂的存储器。几乎到处是应用,不过最明显的是Handler中Message的应用。
例如我们发送个0给handler自己。
handler.obtainMessage(0).sendToTarget();
我们进去看Handler的源码,obtainMessage如下
我们可以看到,sPool指向的是一个链表,其实这个链表是存储我们用过的Message的,当我们obtain一个Message的时候,会去取链表中的第一个,并把sPool指向下一个,同时把取到的置空。
我们可以知道Message的享元模式不是使用的传统的map方式,而是自己构建一个链表,灵活使用我们的享元模式思想才是重点。
简书地址:Anderson大码渣
本文来自“等夏天等秋天”用户投稿,该文观点仅代表作者本人,不代表华夏信息网立场,本站不对文章中的任何观点负责,内容版权归原作者所有、内容只用于提供信息阅读,无任何商业用途。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站(文章、内容、图片、音频、视频)有涉嫌抄袭侵权/违法违规的内容,请发送邮件至1470280261#qq.com举报,一经查实,本站将立刻删除、维护您的正当权益。如若转载,请注明出处:http://www.xxxwhg.com/zh/102104.html