設計模式——原型模式
阿新 • • 發佈:2018-03-31
rri 模板 post set main receive 簽名 supported RR
- 原型模式定義
用原型實例指定創建對象的種類,並通過拷貝這些原型創建新的對象。
思路
原型模式主要用於對象的復制,核心是一個clone方法,通過該方法驚喜對象的拷貝,Java提供了Cloneable接口來標記對象可拷貝。有可能被拷貝->可以被拷貝,實現方法是覆蓋clone()方法。對應需求
超級商城每次商品狀態變更,都需要以郵件形式發送變更消息給對應產品和運營人員,其中更改的信息只有商品名稱,商品URL,商品狀態,其余均為不更改模板,這時候如果能夠使用模板模式將會省去很多代碼。原型模式UML圖
/** * Created by jianw.li on 2017/12/12. * 原型模式 */ public class Client { private static final Random random = new Random(); public static void main(String[] args) { Mail mail = new Mail(new MailTemplate()); mail.setTail("張三|機票事業部|西小口"); for (int i = 0; i < 5; i++) { Mail cloneMail = mail.clone(); cloneMail.setName(String.valueOf(random.nextInt(100))); cloneMail.setName(String.valueOf(random.nextInt(100)) + ".com"); //發送郵件 } } }
/** * Created by jianw.li on 2017/12/13. * 郵件類 */ public class Mail { /** * 收件人 */ private String receiver; /** * 郵件標題 */ private String subject; /** * 發送人 */ private String name; /** * 郵件內容 */ private String context; /** * 郵件簽名 */ private String tail; public Mail(MailTemplate mailTemplate) { this.subject = mailTemplate.getMailSubject(); this.context = mailTemplate.getMailContent(); } @Override public Mail clone() { Mail mail = null; try { mail = (Mail) super.clone(); } catch (CloneNotSupportedException e) { //日誌 } 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 getName() { return name; } public void setName(String name) { this.name = name; } 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 MailTemplate {
/**
* 郵件標題
*/
private String mailSubject = "超級商城商品價格變更";
private String mailContent = "xxx商品價格變更";
public String getMailSubject() {
return mailSubject;
}
public String getMailContent() {
return mailContent;
}
}
設計模式——原型模式