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 赤鬼王血池 **/