Moosphan / Android-Daily-Interview

:pushpin:每工作日更新一道 Android 面试题,小聚成河,大聚成江,共勉之~

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

2019-08-14:谈谈你对原型模式的理解?

Moosphan opened this issue · comments

2019-08-14:谈谈你对原型模式的理解?

不会,谢谢

用原型类声明创建对象的种类,通过克隆创建对象

通过克隆一个已存在的实例,来"实例化"一个新的实例。

原型模式 在已有对象实例的基础上快速生成与其一样的实例
可以作用于当NEW一个实例代价比较大的时候(例如要经过一次复杂IO后)
抽象原型角色:定义复制实例的接口 Cloneable
具体原型角色:实现cloneable 生成新的实例
使用者角色:提供注册表和获取实例方法 委托clone方法创建新实例

1.定义
用原型对象的实例指定创建对象的种类,并通过拷贝这些原型创建新的对象.

2.使用场景
    (1)类初始化需要消耗比较多的资源,通过原型拷贝可以避免这些消耗
    (2)当new一个对象需要非常繁琐的数据准备等,这时可以使用原型模式
    (3)当一个对象需要提供给其他调用者使用,并且各个调用者都可能修改其值时, 通过原型模式拷贝多个对象供调用者使用,保护性拷贝

Android 源码中例子:
Intent ,Intent的查找与匹配

原型模式实质上就是对象拷贝,要注意深拷贝和浅拷贝问题. 还有就是保护性拷贝,就是某个对象对外是只读的,为了防止外部对这个只读对象修改,通常可以通过返回一个对象的拷贝来实现只读的限制.

优点:
原型模式是在内存中的二进制流的拷贝,性能要比new一个对象好的多.减少了约束.

缺点:
直接在内存中拷贝,构造函数是不会执行的,减少了约