原型模式定义:用原型实例指定建立对象的种类,而且经过拷贝这些原型建立新的对象。java
首先了解原型模式以前咱们先理解一下Cloneable这个类:安全
原型模式使用场景:app
/** * @author Lin * @Date 2018/1/5. */ public class Mail implements Cloneable{ /** * 收件人 */ private String receiver; /** * 邮件名称 */ private String subject; /** * 称谓 */ private String appellation; /** * 邮件内容 */ private String content; /** * 邮件尾部信息 */ private String tail; public Mail(AdvTemplate advTemplate){ this.content = advTemplate.getAdvContent(); 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 getContent() { return content; } public void setContent(String content) { this.content = content; } public String getTail() { return tail; } public void setTail(String tail) { this.tail = tail; } }
/** * @author Lin * @Date 2018/1/5. */ public class AdvTemplate { /** * 广告信名称 */ private String advSubject = "xx银行过年信用卡抽奖活动"; /** * 广告信内容 */ private String advContent = "国庆抽奖活动通知:只要你刷卡就送你一个亿。。。。"; public String getAdvSubject() { return advSubject; } public String getAdvContent() { return advContent; } }
import java.util.Random; /** * @author Lin * @Date 2018/1/5. */ 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 mailClone = mail.clone(); mailClone.setAppellation(getRandString(5) + "先生(女士)"); mailClone.setReceiver(getRandString(5) + "@" + getRandString(8) + ".com"); sendMail(mailClone); i++; } } public static void sendMail(Mail mail){ System.out.println("标题:" + mail.getSubject() + "\t收件人:" + mail.getReceiver() + "\t.....发送成功!"); } public static String getRandString(int maxLength){ String source = "abcdefghijklnmopqrstuvwxyzABCDEFGHIJKLNMOPQRSTUVWXYZ"; 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(); } }