6.原型模式

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

/**

* 原型模式

* 关键:

* (java):实现Cloneable 接口,并重写Clone方法

* 浅复制:复制对象,把对象中的数值类型进行复制,复制引用但不复制引用的对象

* 深复制:复制对像,把对象中的数值类型进行复制,并且复制引用的对象(需要自己重写clone方法,例子如下)

* @author zbl

*

*/

//深复制

public class PrototypeCustomer {

public static void main(String[] args) throws CloneNotSupportedException {

WorkExperience experience = new WorkExperience();

Resume r1 = new Resume("12","yy",experience);

r1.setWorkExperience("2018", "XIXI");

Resume r2 = (Resume) r1.clone();

r2.setWorkExperience("2017", "haha");

System.out.println(r1.toString());

System.out.println(r2.toString());

}

}

class Resume implements Cloneable{

private String name;

private String age;

private WorkExperience workExperience;

public Resume(WorkExperience workExperience) throws CloneNotSupportedException {

this.workExperience = (WorkExperience) workExperience.clone();

}

public Resume(String name, String age,WorkExperience workExperience) throws CloneNotSupportedException {

this.name = name;

this.age = age;

this.workExperience = workExperience;

}

public void setWorkExperience(String workDate, String company) {

workExperience.setWorkDate(workDate);

workExperience.setCompany(company);

}

@Override

protected Object clone() throws CloneNotSupportedException {

Resume obj = new Resume(this.workExperience);

obj.setAge(this.age);

obj.setName(this.name);

return obj;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAge() {

return age;

}

public void setAge(String age) {

this.age = age;

}

@Override

public String toString() {

return "Resume [name=" + name + ", age=" + age + ", workExperience=" + workExperience.getWorkDate() + "||"+workExperience.getCompany()+"]";

}

}

class WorkExperience implements Cloneable{

private String workDate;

private String company;

public String getWorkDate() {

return workDate;

}

public void setWorkDate(String workDate) {

this.workDate = workDate;

}

public String getCompany() {

return company;

}

public void setCompany(String company) {

this.company = company;

}

@Override

protected Object clone() throws CloneNotSupportedException {

return super.clone();

}

}

猜你喜欢

转载自blog.csdn.net/littlelittleguai/article/details/84107900
今日推荐