专业的JAVA编程教程与资源

网站首页 > java教程 正文

Java设计模式之原型模式(原型模式uml图)

temp10 2025-07-28 20:13:11 java教程 2 ℃ 0 评论

原型模式

原型模式虽然是创建型的模式,但是与工厂模式没有关系,该模式的思想就是将一根对象作为原型,对其进行复制、克隆,产生一根和原对象类似的新对象。在java中,复制对象是通过clone()实现的,首先创建一个原型类。

public class Prototype implements Cloneable {
	public Object clone() throws CloneNotSupportedException {
		Prototype proto = (Prototype) super.clone();
		return proto;
	}
}

一个原型类,只需要实现了Cloneable接口,覆写clone方法,此处clone方法可以改成任意的名称,Cloneable接口是一个标记接口(空接口),可以任意定义实现类的方法名,重点是需要调用父类(Object)中的clone方法,Object类中的clone的对象复制,属于对象的浅复制。
浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。
深复制:将一个对象复制后,不论是基本数据类型还是引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。

Java设计模式之原型模式(原型模式uml图)

public class Prototype implements Cloneable, Serializable {
	
	private static final long serialVersionUID = -2753377182918295778L;
	
	private String name;
	private int count;
	private Object object;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}

	public Object getObject() {
		return object;
	}

	public void setObject(Object object) {
		this.object = object;
	}

	public Prototype clone() throws CloneNotSupportedException {
		Prototype proto = (Prototype) super.clone();
		return proto;
	}
	
	public Prototype 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 (Prototype)ois.readObject();  
	}
	
}

要实现深复制,需要采用流的方式读入当前对象的二进制输入,再写入二进制数据对应的对象。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表