用乙個已經建立的例項作為原型,通過複製該原型物件來建立乙個和原型相同或相似的新物件。在這裡,原型例項指定了要建立的物件的種類。用這種方式建立物件非常高效,根本無須知道物件建立的細節。
1.淺拷貝
package com.moshi;
public class test
}class user implements cloneable
public string getname()
public void setname(string name)
public int getage()
public void setage(int age)
public book getbook()
public void setbook(book book)
@override
protected object clone() throws clonenotsupportedexception
}class book
public string getbookname()
public void setbookname(string bookname)
}
輸出結果:aa
二本書366712642*****==366712642
可以發現,兩個物件所依賴的物件的hashcode是同乙個物件,引用的記憶體位址還是同乙個。
2.深拷貝
package com.moshi;
public class test
}class user implements cloneable
public string getname()
public void setname(string name)
public int getage()
public void setage(int age)
public book getbook()
public void setbook(book book)
@override
protected object clone() throws clonenotsupportedexception
}class book implements cloneable
public string getbookname()
public void setbookname(string bookname)
@override
protected object clone() throws clonenotsupportedexception
}
輸出結果:
aa一本書
366712642*****==1829164700
可以發現,重寫clone方法後,兩個物件所依賴的物件的hashcode不一致了。則表示引用的記憶體位址不一致。
原型模式 詳解
用原型例項指定建立物件的種類,並通過拷貝這些原型建立新的物件 建立型模式 淺拷貝 使用乙個已知例項對新建立例項的成員變數逐個賦值 深拷貝 當乙個類的拷貝構造方法,不僅要複製物件的所有非引用成員變數值,還要為引用型別的成員變數建立新的例項,並且初始化為形式引數例項值 從網上找到的例圖 第一種建立物件方...
設計模式詳解 原型模式
是指原型例項指定建立物件的種類,並通過拷貝這些原型建立新的物件。而呼叫者不需要知道任何建立細節,不呼叫建構函式 其實就是如何快速構建物件的方法總結,比如簡單工廠將getter setter封裝到某個方法中 jdk提供實現cloneable介面,實現快速複製。當初在spring配置scope prot...
設計模式詳解 原型模式
原型模式 prototype pattern 是用於建立重複的物件,同時又能保證效能。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。這種模式是實現了乙個原型介面,該介面用於建立當前物件的轉殖。當直接建立物件的代價比較大時,則採用這種模式。例如,乙個物件需要在乙個高代價的資料庫操作...