1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
| package Prototype;
import java.util.ArrayList; import java.util.List;
interface CoverLetter extends Cloneable { CoverLetter shallowCopy();
CoverLetter deepCopy();
void customize(String companyName, String position);
String getContent();
List<String> getSkills();
void addSkill(String skill); }
class BasicCoverLetter implements CoverLetter { private String template; private String companyName; private String position; private List<String> skills;
public BasicCoverLetter() { template = "我申请{COMPANY}的{POSITION}职位。" + "技能包括:{SKILLS}" + "期待为{COMPANY}做出贡献。"; skills = new ArrayList<>(); }
@Override public CoverLetter shallowCopy() { try { return (CoverLetter) super.clone(); } catch (CloneNotSupportedException e) { return null; } }
@Override public CoverLetter deepCopy() { BasicCoverLetter copy = new BasicCoverLetter(); copy.template = this.template; copy.companyName = this.companyName; copy.position = this.position; copy.skills = new ArrayList<>(this.skills); return copy; }
@Override public void customize(String companyName, String position) { this.companyName = companyName; this.position = position; }
@Override public String getContent() { String skillsString = String.join(", ", skills); return template.replace("{COMPANY}", companyName).replace("{POSITION}", position).replace("{SKILLS}", skillsString); }
@Override public List<String> getSkills() { return skills; }
@Override public void addSkill(String skill) { skills.add(skill); } }
class CoverLetterPrototypeManager { private final BasicCoverLetter prototype;
public CoverLetterPrototypeManager() { prototype = new BasicCoverLetter(); prototype.addSkill("Java编程"); prototype.addSkill("问题解决"); }
public CoverLetter getShallowCopy() { return prototype.shallowCopy(); }
public CoverLetter getDeepCopy() { return prototype.deepCopy(); } }
public class CoverLetterClient { public static void main(String[] args) { CoverLetterPrototypeManager manager = new CoverLetterPrototypeManager();
CoverLetter shallowCopy1 = manager.getShallowCopy(); shallowCopy1.customize("谷歌", "软件工程师"); CoverLetter shallowCopy2 = manager.getShallowCopy(); shallowCopy2.customize("微软", "产品经理");
shallowCopy1.addSkill("机器学习");
System.out.println("浅拷贝 1:\n" + shallowCopy1.getContent()); System.out.println("\n浅拷贝 2:\n" + shallowCopy2.getContent());
CoverLetter deepCopy1 = manager.getDeepCopy(); deepCopy1.customize("苹果", "iOS开发者"); CoverLetter deepCopy2 = manager.getDeepCopy(); deepCopy2.customize("亚马逊", "云架构师");
deepCopy1.addSkill("Swift编程");
System.out.println("\n深拷贝 1:\n" + deepCopy1.getContent()); System.out.println("\n深拷贝 2:\n" + deepCopy2.getContent()); } }
|