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

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

猜你喜欢

转载自blog.csdn.net/wangqiubo2010/article/details/79501113