1. 程式人生 > 其它 >python requests 包

python requests 包

技術標籤:設計模式設計模式原型模式

原型模式

一、淺克隆

/**
 * 實現一個介面 Cloneable
 * 重寫一個方法 clone()
 */
public class Video implements Cloneable{
    private String name;
    private Date createTime;

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
public Video() { } public Video(String name, Date createTime) { this.name = name; this.createTime = createTime; } // set、get 方法... @Override public String toString() { return "Video{" + "name='" + name + '\'' +
", createTime=" + createTime + '}'; } }
public class Bilibili {
    public static void main(String[] args) throws CloneNotSupportedException {
        // 原型物件 v1
        Video v1 = new Video("java教學",new Date());
        System.out.println("video=>"
+v1.toString()); System.out.println("video hashcode=>"+v1.hashCode()); // v1 克隆 v2 Video v2 = (Video) v1.clone(); // 克隆出的物件一模一樣,但是hashcode不一樣說明是兩個物件 System.out.println("videoc=>"+v2.toString()); System.out.println("videoc hashcode=>"+v2.hashCode()); v1.setCreateTime(new Date(20201129)); System.out.println("video=>"+v1.toString()); System.out.println("videoc=>"+v2.toString()); } }

這種方式是淺克隆,v1 的 date 和 v2 的 date 指向同一個物件。v1 的 date 修改,v2 的 date 同樣會修改。
在這裡插入圖片描述

二、深克隆

方式一:序列化、反序列化
方式二:改造克隆方法

這裡使用方法二

    @Override
    protected Object clone() throws CloneNotSupportedException {
        // 獲得克隆物件
        Object obj = super.clone();
        Video video = (Video) obj;
        // 實現深克隆:克隆物件的屬性也進行克隆
        video.createTime = (Date) this.createTime.clone();
        // 返回克隆物件
        return super.clone();
    }

結果輸出,可以看到使用深克隆的方式,v1 的 date 和 v2 的 date 指向同不同的物件。在這裡插入圖片描述

  • Spring Bean:單例模式、原型模式
  • 原型模式 + 工廠模式 ==> new <=>原型模式