設計模式6——原型模式
阿新 • • 發佈:2020-08-27
設計模式6——原型模式
package com.ghl.prototype.demo01; import javax.xml.crypto.Data; import java.util.Date; /** * @ProjectName DesignPattern * @ClassName video * @Date 2020/8/26 22:24 * @Author gaohengli * @Version 1.0 */ /* 1.實現一個類 Cloneable 2.重寫一個方法 clone() */ //原型模式 //克隆別人的視訊 public class Video implements Cloneable { private String name; private Date createTime; //重寫克隆方法 @Override protected Object clone() throws CloneNotSupportedException { //淺克隆 //return super.clone(); Object obj=super.clone(); Video v=(Video)obj; //實現深克隆,將這個物件的屬性也進行克隆 v.createTime= (Date) this.createTime.clone(); return obj; } public Video() { } public Video(String name, Date createTime) { this.name = name; this.createTime = createTime; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } @Override public String toString() { return "video{" + "name='" + name + '\'' + ", createTime=" + createTime + '}'; } }
package com.ghl.prototype.demo01; import java.util.Date; /** * @ProjectName DesignPattern * @ClassName BiliBili * @Date 2020/8/26 22:30 * @Author gaohengli * @Version 1.0 */ //客戶端,克隆 public class BiliBili { public static void main(String[] args) throws CloneNotSupportedException { //原型物件v1 Date date = new Date();//當前日期 Video v1 = new Video("ghl", date); System.out.println("v1="+v1); System.out.println("v1的hash:"+v1.hashCode()); //v1克隆v2 Video v2 = (Video) v1.clone(); System.out.println("v2="+v2); System.out.println("v2的hash:"+v2.hashCode()); //修改克隆的物件 v2.setName("clone:ghl"); System.out.println("修改後的v2:"+v2); //淺克隆(日期更改後,clone出來的例項的日期也會更改,未完全成為一個獨立個體) //深客隆(深克隆還可以使用序列化,反序列化實現) System.out.println("v1->"+v1); System.out.println("v2->"+v2); date.setTime(2222); System.out.println("v1->"+v1); System.out.println("v2->"+v2); } }
淺克隆:
深克隆: