设计模式——原型模式

Posted boycelee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式——原型模式相关的知识,希望对你有一定的参考价值。

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





以上是关于设计模式——原型模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之原型模式(Prototype)详解及代码示例

设计模式课程 设计模式精讲 9-2 原型模式coding

设计模式--原型模式

设计模式原型模式

Java设计模式----原型模式

设计模式--------原型模式