设计方式-原型模式(prototype pattern)
设计模式----原型模式(prototype pattern)
AdvTemplate.java代码如下:
Mail.java代码如下:
Client.java代码如下:
运行结果如下:
AdvTemplate.java代码如下:
package com.designPattern.prototype; public class AdvTemplate { private String advSubject = "title"; private String advContext = "context"; public String getAdvSubject() { return advSubject; } public String getAdvContext() { return advContext; } }
Mail.java代码如下:
package com.designPattern.prototype; /** * * @author yangjianzhou * 使用原型模式时需要注意的几个问题: * 1.对象拷贝时,类的构造函数是不会被执行的 * 2.浅拷贝与深拷贝的问题 * 3.clone与final的关系 */ 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 public 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; } }
Client.java代码如下:
package com.designPattern.prototype; import java.util.Random; public class Client { 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++; } } public static void sendMail(Mail mail){ System.out.println("标题:"+mail.getSubject()+"\t收件人:"+mail.getReceiver()+"\t发送成功"); } public static String getRandString(int maxLength){ String source = "abcdefghijklmnopqrstuvwxyz"; StringBuffer sb = new StringBuffer(); Random rand = new Random(); for(int i=0;i<maxLength;i++){ sb.append(source.charAt(rand.nextInt(source.length()))); } return sb.toString(); } }
运行结果如下:
标题:title 收件人:xuzya@sooosxsu.com 发送成功 标题:title 收件人:areqo@krcmvkva.com 发送成功 标题:title 收件人:wyeyy@mlocbsqt.com 发送成功 标题:title 收件人:ezdkj@fnrmbsnp.com 发送成功 标题:title 收件人:nmuuz@vsvhxgxi.com 发送成功 标题:title 收件人:yrgqu@ggomwgtj.com 发送成功