首页 > 其他 > 详细

设计模式 之 原型模式

时间:2021-05-27 22:22:16      阅读:18      评论:0      收藏:0      [点我收藏+]

简介

原型模式, 狂神老师讲的很简单, 就是重写clone, 在C++中可能是重写拷贝构造函数.

code

TIPS: 对于date来说, 如果不重新clone 的话就会是浅拷贝. 浅拷贝, 本质上是两个指针指向一个对象.

package prototype;

import java.util.Date;

/**
 * Created by lee on 2021/5/27.
 */
public class Video implements Cloneable {
    private String name;
    private Date createTime;

    @Override
    protected Object clone() throws CloneNotSupportedException {
        Object obj = super.clone();
        Video v = (Video) obj;
        v.createTime = (Date)this.createTime.clone();
        return super.clone();
    }

    public Video(String name, Date createTime) {
        this.name = name;
        this.createTime = createTime;
    }

    public Video() {
    }

    @Override
    public String toString() {
        return "Video{" +
                "name=‘" + name + ‘\‘‘ +
                ", createTime=" + createTime +
                ‘}‘;
    }

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

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}

package prototype;

import java.util.Date;

/**
 * Created by lee on 2021/5/27.
 */
public class Bilibili {
    public static void main(String[] args) throws CloneNotSupportedException {
        Date date = new Date();
        Video v1 = new Video("name", date);
        System.out.println("v1=>"+v1);
        System.out.println("v1=>hash:" + v1.hashCode());

        Video v2 = (Video) v1.clone();
        System.out.println("v2=>"+v2);
        System.out.println("v2=>hash:" + v2.hashCode());
    }
}

设计模式 之 原型模式

原文:https://www.cnblogs.com/eat-too-much/p/14819776.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!