原型模式
原型模式
原型模式(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);
}
}