原型模式的定义:
用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。
原型模式的使用场景:
1.类初始化需要消耗非常多的资源,包括数据、硬件资源等;
2.通过new产生一个对象需要非常繁琐的数据准备或访问权限;
3.一个对象需要提供给其他对象访问,而且各个调用者可能度需要修改其值时。
简单实现的方式:
实现Cloneable接口,重写clone方法
public class Word {
private String mText;
private ArrayList<String> mImages = new ArrayList<>();
@Override
protected Word clone() {
Word doc = null;
try {
doc = (Word) super.clone();
//浅拷贝
doc.mImages = this.mImages;
doc.mText = this.mText;
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return doc;
}
//...setter ...getter
}
这里涉及到浅拷贝和深拷贝的知识:
浅拷贝:只是影子拷贝,实际上并不是将数据拷贝一份,而是将引用指向了内存中对象的内存地址。
深拷贝:真实的将数据进行拷贝。
只需要将注释下的代码替换成以下方式:
doc.mImages = (ArrayList<String>) this.mImages.clone()
优点:
原型模式时在内存中二进制流的拷贝,要比直接new一个对象性能好的多,尤其是循环体内。
缺点:
直接在内存中拷贝是不会执行构造函数的,实际开发要注意。
读《Android源码设计模式解析与实战》后记录