码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式——原型模式

时间:2018-03-31 19:32:43      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:val   text   邮件内容   post   实现   for   not   name   ext   

  • 原型模式定义
    用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。
  • 思路
    原型模式主要用于对象的复制,核心是一个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;
    }
}

设计模式——原型模式

标签:val   text   邮件内容   post   实现   for   not   name   ext   

原文地址:https://www.cnblogs.com/boycelee/p/8683573.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!