java中的Object类是所有类的根类。Object类提供了一个clone()方法,该方法可以将一个java对象复制一份,但是需要实现clone的java类必须要实现一个接口Cloneable,该接口表示该类能够复制且具有复制的能力。

 

  原型模式基本介绍

      1). 原型模式是指: 用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象。

      2). 原型模式是一种创建型的设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节。

     3). 工作原理是通过将一个原型对象传给那个要发动创建的对象。这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建,即 对象.clone()。

 

设计模式:原型模式_深拷贝

Prototype: 原型类,  声明一个克隆自己的接口。

CreatePrototype: 具体的原型类,实现一个克隆自己的操作。

 

 

public class Car implements Cloneable{
	
	String color; // 颜色
	String brand; // 品牌
	
	public Car() {
	}
	public Car(String color, String brand) {
		super();
		this.color = color;
		this.brand = brand;
	}
	
	// 克隆该实例,使用默认的clone方法来完成
	@Override
	protected Object clone() throws CloneNotSupportedException {
		Car car = (Car)super.clone();
		
		return car;
	}
	
	public String getColor() {
		return color;
	}
	@Override
	public String toString() {
		return "Car [color=" + color + ", brand=" + brand + "]";
	}
	
	public void setColor(String color) {
		this.color = color;
	}
	public String getBrand() {
		return brand;
	}
	public void setBrand(String brand) {
		this.brand = brand;
	}
}
public class Client {
	public static void main(String[] args) throws CloneNotSupportedException{
		Car car = new Car("white", "BMW");
		
		Car car2 = (Car)car.clone();
		Car car3 = (Car)car.clone();
		
		System.out.println(car2);
		System.out.println(car3);
	}
}

在spring中, scope="prototype"就是使用原型模式创建bean的

<bean id="student" class="com.atChina.Test.Student" scope="prototype">
            <property name="name" value="宋江"/>
            <property name="age" value="20" />
        </bean>

 

 深拷贝:

   深拷贝实现方式一: 重写clone方法来实现深拷贝。

   深拷贝实现方式二: 通过对象序列化实现深拷贝。