用原型執行個體制定建立對象的種類,并通過拷貝這些原型,建立新的對象。
就是從一個對象在建立另一個可定制的對象,而且不需要知道任何建立的細節。
(1)、實作Cloneable接口,可以使用此接口的類上使用clone方法。
(2)、重寫Object類中的clone方法,因為所有類的父類是Object類,Object有一個clone方法,作用是傳回對象的一個拷貝,但是其作用域protected類型的,一般的類無法調用,是以,将clone改為public類型。
代碼實作:
用戶端代碼:
這就是簡單複制。一般在初始化的資訊不發生變化的情況下,科隆市最好的辦法,這既隐藏了對象建立的細節,有對性能是大大的提高。 使用原型模式建立對象比直接new一個對象在性能上要好的多,因為Object類的clone方法是一個本地方法,它直接操作記憶體中的二進制流,特别是複制大對象時,性能的差别非常明顯。
Object類的clone方法隻會拷貝對象中的基本的資料類型,對于數組、容器對象、引用對象等都不會拷貝,這就是淺拷貝。如果要實作深拷貝,必須将原型模式中的數組、容器對象、引用對象等另行拷貝。
這裡指談談引用對象的深複制:
需要解決的代碼:
運作結果:
而實際上,我們需要的是不一樣的。
修改代碼:
用戶端代碼不變。
運作結果:
得到預期結果。
其實,我們使用原型模式,簡單的說我們就是簡化對象的建立。