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方法来实现深拷贝。
深拷贝实现方式二: 通过对象序列化实现深拷贝。