标签:原型模式
public class AdvTemplate { private String advSubject = "XX银行抽奖活动"; //广告名称 private String advContext = "只要刷卡就就送你10Q币"; //广告内容 public String getAdvSubject() { return advSubject; } public String getAdvContext() { return advContext; } }
public class Mail implements Cloneable{ private String receiver; private String subject; private String appellation; private String context; private String tail; public Mail(AdvTemplate advTemplate){ this.context=advTemplate.getAdvContext(); this.subject=advTemplate.getAdvSubject(); } @Override protected Mail clone(){ Mail mail=null; try { mail=(Mail) super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return mail; } public String getReceiver() { return receiver; } public void setReceiver(String receiver) { this.receiver = receiver; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getAppellation() { return appellation; } public void setAppellation(String appellation) { this.appellation = appellation; } public String getContext() { return context; } public void setContext(String context) { this.context = context; } public String getTail() { return tail; } public void setTail(String tail) { this.tail = tail; } }
public class ClientI { private static int MAX_COUNT=6; public static void main(String[] args) { int i=0; Mail mail=new Mail(new AdvTemplate()); mail.setTail("XX银行版权所有"); while(i<MAX_COUNT){ Mail cloneMail=mail.clone(); //在这里拷贝 cloneMail.setAppellation(getRandString(5)+"先生(女生)"); cloneMail.setReceiver(getRandString(5)+"@"+getRandString(8)+".com"); sendMail(cloneMail); i++; } } private static void sendMail(Mail mail) { System.out.println("标题:"+mail.getSubject()+"\t 收件人:"+mail.getReceiver()+"发送成功!"); } private static String getRandString(int maxLength){ String source="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; StringBuffer sb=new StringBuffer(); Random random=new Random(); for(int i=0;i<maxLength;i++){ sb.append(source.charAt(random.nextInt(source.length()))); } return sb.toString(); } }
public class Thing implements Cloneable{ private ArrayList<String> list=new ArrayList<String>(); public Thing(){ System.out.println("执行了构造方法"); } /*浅拷贝:俩个对象共享了一个私有变量,指向原生对象的内部元素地址,不安全 *深拷贝:thing.list=(ArrayList<String>) this.list.clone(); *满足俩个条件时才不会被拷贝:1.类的成员变量 2.必须是一个可变的引用对象,而不是一个原始类型或不可变对象 */ @Override protected Thing clone(){ Thing thing=null; try { thing=(Thing) super.clone(); thing.list=(ArrayList<String>) this.list.clone(); //没有这句的结果不一样 } catch (CloneNotSupportedException e) { e.printStackTrace(); } return thing; } public void setValue(String value){ list.add(value); } public ArrayList<String> getValue(){ return this.list; } }
public static void main(String[] args) { Thing thing=new Thing(); thing.setValue("LOL"); Thing thingClone=thing.clone(); thingClone.setValue("CF"); System.out.println(thing.getValue()); } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:原型模式
原文地址:http://blog.csdn.net/cjvs9k/article/details/46964371