原型模式虽然是创建型的模式,但是与工厂模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。
很简单就是克隆对象,创建新的引用对象,被克隆的对象就是原型。
- 克隆对象的方式
- 实现Cloneable的clone方法
public class Prototype implements Cloneable {
public Object clone() throws CloneNotSupportedException {
Prototype proto = (Prototype) super.clone();
return proto;
}
}
Cloneable接口只是一个‘标识接口’,没有方法。目的就是为了
通过instanceOf识别可克隆的类。源码可以看到:
- 深克隆和浅克隆的概念
浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。
深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。可以通过序列化去实现。
public class Prototype implements Cloneable, Serializable {
private static final long serialVersionUID = 1L;
private String string;
private SerializableObject obj;
/* 浅复制 */
public Object clone() throws CloneNotSupportedException {
Prototype proto = (Prototype) super.clone();
return proto;
}
/* 深复制 */
public Object deepClone() throws IOException, ClassNotFoundException {
/* 写入当前对象的二进制流 */
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);
/* 读出二进制流产生的新对象 */
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
return ois.readObject();
}
以上四种设计模式都是创建型设计模式,接下来开始学习结构性设计模式。以上设计模式的概要都很简单,后期如果见到好的知识点也会及时补充,大家有什么好的建议,也感谢及时提出!
我是一名挣扎于知识海洋里的JAVA小白,希望能与各位小伙伴们一起学习进步。