先定义一个将来需要被复制的类,实现 Cloneable 接口,重写 copy 方法。
调用对象 clone 方法获取新对象。
在一般的电商平台中,我们会有人员相关的信息,假如存在这样的场景,有一个人员信息对象,我们在合同中用到,在保险中用到,合同中需要对某几个字段进行修改,这个时候,我们就可以用原型模式。(也许这个例子不恰当,读者也可以自己想象。 在这里我们讲解浅拷贝的对象。)
首先我们创建一个 net.haicoder.prototype
包,在该包下面创建 Tourist.java
和 TestMain.java
文件。文件创建完毕,目录结构如下图:
Tourist.java
文件具体代码如下:
package net.haicoder.prototype;
public class Tourist implements Cloneable {
private String name;
private Integer age;
private String idCard;
public Object clone() {
Tourist tourist = null;
try {
tourist = (Tourist) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return tourist;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
@Override
public String toString() {
return "Tourist{" +
"name='" + name + '\'' +
", age=" + age +
", idCard='" + idCard + '\'' +
'}';
}
}
TestMain.java
文件具体代码如下:
package net.haicoder.prototype;
public class TestMain {
public static void main(String[] args) {
Tourist tourist = new Tourist();
tourist.setAge(10);
tourist.setName("嗨客网");
tourist.setIdCard("身份证id");
Tourist copyTourist = (Tourist) tourist.clone();
System.out.println("嗨客网(www.haicoder.net)");
copyTourist.setName("我是copy的");
System.out.println(copyTourist.toString());
}
}
程序运行后,控制台输出如下信息:
设计模式中原型模式的类必须继承 Cloneable 接口,并且对接口中的 clone 方法进行实现。