android和设计模式随谈之原型模式(Prototype)

本文介绍了原型模式在Android中的应用,特别是通过ThreadLocal实现多线程间的变量隔离,确保每个线程拥有独立的MessageQueue和Looper。探讨了浅拷贝与深拷贝的区别及其在克隆对象时的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 原型模式一般采用clone来实现,通过拷贝来获取和这个对象一模一样的数据。
  • clone分为浅拷贝和深拷贝,浅拷贝只会备份一些值变量,例如int,float,double等,对于引用变量,则只是拷贝了一份引用,如果改变本应用的值,其他浅拷贝的引用变量都会变化;深拷贝的话,值变量和引用变量都会增加一个副本,克隆对象相互不影响。
  • 克隆的出现,是因为对象创建的复杂度和资源消耗可能会大大高于克隆;是采用克隆还是采用new,需要经过性能测试才能决定,因为可能的性能不一定小于new的创建。
  • 原型模式在android的具体使用,例如ThreadLocal:
    1、我们知道Handler的核心机制包括Message、MessageQueue、Looper、ThreadLocal,请详见另一篇博文:http://blog.youkuaiyun.com/wangqiubo2010/article/details/79465606
    2、ThreadLocal保证了每个Handler中有且只有一个MessageQueue、Looper。具体原因就是ThreadLocal中定义了一个ThreadLocalMap内部类,并且线程Thread中实例化了ThreadLocal.ThreadLocalMap,因此相当于每个线程备份了一个ThreadLocalMap对象,那么线程内的变量只会对每个现场可见。这样通过每个线程备份自己的一个变量,就解决了多线程访问的问题。
    3、ThreadLocal的实现多线程线程安全的思路,可以看做原型模式的一种实现方式,尽管不是通过继承clone来实现,但是也是通过拷贝思想来实现的原型模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值