美文网首页
第四章 使程序运行更高效--原型模式

第四章 使程序运行更高效--原型模式

作者: 斌斌爱学习 | 来源:发表于2020-10-01 11:49 被阅读0次

    原型模式介绍:是一种创建型的模式,多用于创建复杂的或者构造耗时的实例,因为在这种情况下复制一个已经存在的实例可使程序运行更高效。

    原型模式的定义:用原型实例指定创建对象的种类,并通过复制这些原型创建新的对象。

    使用场景

    • 类初始化需要消耗非常多的资源,这个资源包括数据、硬件资源等,通过原型复制避免这些消耗
    • 通过new产生一个对象需要非常繁琐的数据准备或访问权限,这时可以使用原型模式。
    • 一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑用原型模式复制多个对象共调用者使用,即保护性拷贝。

    浅拷贝和深拷贝:

    1. 关于浅拷贝,并不是将所有字段都重新构造一份,而是copy对象使用了原对象的引用。我们都知道A引用B就是说两个对象指向同一个地址,当修改A时B也会改变,B修改A也会改变。
    2. 在拷贝对象时,对于引用型的字段也要采用拷贝的形式,,而不是单纯采用引用的形式,这样可以避免操作副本时影响原始对象的问题。

    Android源码中的原型模式实现

    1. ArrayList源码
    2. Intent源码

    后面,作者通过Intent源码引出了Intent跳转的逻辑实现,分析了PMS的源码,即从开机启动开始PMS初始化并扫描手机中的系统软件及三方应用,从而获取各安装包中Manifest中注册的所有四大组件:Activity、Service、BroadcastReceiver、ContentProvider列表。当需要跳转时,就是从列表中找到对应intent条件的组建进行跳转。

    小结:
    原型模式本质上就是对象拷贝,于C++中的拷贝构造函数有些类似,它们之间容易出现的问题也都是深拷贝和浅拷贝。使用原型模式可以解决构造复杂对象的资源消耗问题,能够在某些场景下提升创建对象的效率。还有一个重要用途就是保护性拷贝,也就是某个对象对外可能是只读的,为了防止外部对这个只读对象修改,可以通过返回一个对象拷贝的形式实现只读的限制。

    优点:原型模式是在内存中二进制流的拷贝,要比直接new一个对象性能要好很多,特别是要在一个循环体内产生大量的对象时,原型模式建议更好地体现其优点
    缺点:这既是它的优点也是缺点,直接在内存中拷贝,构造函数是不会执行的,在实际开发当中应该注意这个潜在的问题。

    相关文章

      网友评论

          本文标题:第四章 使程序运行更高效--原型模式

          本文链接:https://www.haomeiwen.com/subject/cmumuktx.html