设计模式(java版)——创建型——原型模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37776094/article/details/89633608

项目源码已提交github:https://github.com/ckl001/designPattem_java
在原型模式中我们可以利用过一个原型对象来指明我们所要创建对象的类型,然后通过复制这个对象的方法来获得与该对象一模一样的对象实例。
这就是原型模式的设计目的。

package com.Ljava.design.pattem.creational.prototype;

import java.util.Date;

/**
 * @Auther 20173
 * @Date 2019-4-9 10:28
 * @Des 邮箱
 **/
public class Mail implements Cloneable{

    //浅克隆
//    @Override
//    protected Object clone() throws CloneNotSupportedException {
//        System.out.println("克隆");
//        return super.clone();
//    }

    //深克隆
    @Override
    protected Object clone() throws CloneNotSupportedException {
        Mail mail = (Mail)super.clone();

        //深克隆
        mail.birthday = (Date) mail.birthday.clone();
        return mail;
    }

    private Date birthday;
    private String name;
    private String emailAddress;
    private String content;

    public Mail() {
        System.out.println("Mail的构造函数");
    }

    @Override
    public String toString() {
        return "Mail{" +
                "birthday=" + birthday +
                ", name='" + name + '\'' +
                ", emailAddress='" + emailAddress + '\'' +
                ", content='" + content + '\'' +
                '}';
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmailAddress() {
        return emailAddress;
    }

    public void setEmailAddress(String emailAddress) {
        this.emailAddress = emailAddress;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

package com.Ljava.design.pattem.creational.prototype;

import java.text.MessageFormat;

/**
 * @Auther 20173
 * @Date 2019-4-9 10:33
 * @Des 邮件工具类
 **/
public class MailUtil {

    public static void sendMail(Mail mail){
        String outputContent = "向{0}同学,邮件地址:{1},邮件内容:{2},时间: {3} 发送邮件成功";
        System.out.println(MessageFormat.format(outputContent, mail.getName(),mail.getEmailAddress(), mail.getContent(), mail.getBirthday()));
    }

    public static void saveOrginmailRecord(Mail mail){
        System.out.println("保存Orginmail:" + mail.getContent());
    }
}

package com.Ljava.design.pattem.creational.prototype;

import java.util.Date;

/**
 * @Auther 20173
 * @Date 2019-4-9 10:37
 * @Des TODO
 **/
public class Test {

    public static void main(String[] args) throws CloneNotSupportedException {
        Mail mail = new Mail();
        mail.setContent("初始化邮件模板。。。");
        mail.setBirthday(new Date());
        System.out.println("初始化mail:" + mail.toString());

        Mail mail1 = (Mail) mail.clone();
        mail1.setName("name");
        mail1.setEmailAddress("[email protected]");
        mail1.setContent("好嗨喔");
        mail.setBirthday(new Date("2019/04/02")); //深克隆,会修改原对象的值
        MailUtil.sendMail(mail1);

        System.out.println(mail1.toString());
        System.out.println("被修改后的mail:" + mail.toString());
        MailUtil.saveOrginmailRecord(mail);
    }
}

猜你喜欢

转载自blog.csdn.net/m0_37776094/article/details/89633608