http://www.books.com.tw/products/0010750585
chap21.
原型模式 Prototype
目的:複製一個物件而不是重新創建一個
package com.ssc24.chap21.demo01;
public class AdventurExperience implements Cloneable {
private String date;
private String location;
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
}
package com.ssc24.chap21.demo01;
public class Resume implements Cloneable {
private String name;
private int level;
private String profession;
private AdventurExperience experience;
public Resume(String name,String profession,int level) {
this.name = name;
this.profession = profession;
this.level = level;
this.experience = new AdventurExperience();
}
private Resume (AdventurExperience experience) throws CloneNotSupportedException {
this.experience = (AdventurExperience) experience.clone();
}
public Object clone() throws CloneNotSupportedException {
Resume clone = new Resume(experience);
clone.setName(this.name);
clone.setLevel(this.level);
clone.setProfession(this.profession);
return clone;
}
public void display() {
System.out.printf(" 冒險者:%s-%s 等級:%d \n",name,profession,level);
System.out.printf(" 冒險經歷:%s %s \n",experience.getDate(),experience.getLocation());
System.out.println();
}
public void setExperience(String date,String location) {
experience.setDate(date);
experience.setLocation(location);
}
public void setName(String name) {
this.name = name;
}
public void setLevel(int level) {
this.level = level;
}
public void setProfession(String profession) {
this.profession = profession;
}
public void setExperience(AdventurExperience experience) {
this.experience = experience;
}
}
package com.ssc24.chap21.demo01;
import static org.junit.Assert.*;
import org.junit.Test;
public class ResumeTest {
@Test
public void test() throws CloneNotSupportedException {
System.out.println("===原型模式測試====");
Resume resume = new Resume("傑克", "見習道士", 1);
resume.setExperience("2011/01/01", "仙靈島");
Resume resume2 = (Resume) resume.clone();
resume2.setLevel(5);
resume2.setExperience("20/12/03/31","隱龍窟");
Resume resume3 = (Resume) resume2.clone();
resume3.setProfession("殭屍道長");
resume3.setExperience("2012/11/31", "赤鬼王血池");
System.out.println("---第一份履歷---");
resume.display();
System.out.println("---第二份履歷---");
resume2.display();
System.out.println("---第三份履歷---");
resume3.display();
}
} /** ===原型模式測試==== ---第一份履歷--- 冒險者:傑克-見習道士 等級:1 冒險經歷:2011/01/01 仙靈島 ---第二份履歷--- 冒險者:傑克-見習道士 等級:5 冒險經歷:20/12/03/31 隱龍窟 ---第三份履歷--- 冒險者:傑克-殭屍道長 等級:5 冒險經歷:2012/11/31 赤鬼王血池 **/