原型模式
原型模式
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。属于创建型模式的一种,提供了一种创建对象的最佳方式。
这种模式是实现了一个原型接口
实践
可以将深拷贝换成浅拷贝看下结果
个人理解:原型模式就是一种优雅的拷贝实现方式
Video.java
package com.example.designPattern23.prototype;
import java.util.Date;
import lombok.Data;
@Data
public class Video implements Cloneable {
    private String id;
    private Date date;
    public Video() {
    }
//    // 浅拷贝
//    @Override
//    protected Object clone() throws CloneNotSupportedException {
//        return super.clone();
//    }
    // 深拷贝
    @Override
    protected Object clone() throws CloneNotSupportedException {
        Object o = super.clone();
        Video v = (Video) o;
        v.date = (Date) date.clone();
        return v;
    }
    public Video(String id, Date date) {
        this.id = id;
        this.date = date;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public Date getDate() {
        return date;
    }
    public void setDate(Date date) {
        this.date = date;
    }
    @Override
    public String toString() {
        return "Video{" +
                "id='" + id + '\'' +
                ", date=" + date +
                '}';
    }
}
调用Bilibili.java
package com.example.designPattern23.prototype;
import java.util.Date;
public class Bilibili {
    public static void main(String[] args) throws CloneNotSupportedException, InterruptedException {
        Date date = new Date();
        Video v1 = new Video("狂神说java", date);
        Video v2 = (Video) v1.clone();
        System.out.println("v1:" + v1);
        System.out.println("v2:" + v2);
        System.out.println("================================");
        date.setTime(1213144);
        System.out.println("v1:" + v1);
        System.out.println("v2:" + v2);
    }
}
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号