原型模式
用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。
結構圖
prototype:原型類,宣告乙個轉殖自身的介面
concreteprototype:具體原型類,實現乙個轉殖自身的操作
client:客戶端,讓乙個原型轉殖自身從而建立乙個新的物件
**實現
public class prototypea01 implements cloneable
public void setid(int id)
@override
protected object clone() throws clonenotsupportedexception
@override
public string tostring() ';
}}public class testmain
}
執行結果prototypea
prototypea
process finished with exit code 0
關鍵點在於,實現 cloneable 介面以及用 object 的 clone 方法。這樣就可以不用例項化物件,直接轉殖就可以了,只需要實現這個介面就可以完成原型模式了!
淺轉殖與深轉殖
在原型模式中有兩個概念我們需要了解一下,就是淺轉殖和深轉殖的概念。如果物件裡的屬性都是值型別那麼沒有問題,如果物件裡有引用型別則是複製引用而不是複製引用的物件,因此原始物件及其複製物件引用同乙個物件。
淺轉殖
深轉殖
例如
public class prototypea01 implements cloneable
public void setid(int id)
@override
protected object clone() throws clonenotsupportedexception
@override
public string tostring() ';
}}public class prototypea01
public void setid(int id)
@override
public string tostring() ';
}}public class testmain
}
執行結果prototypea}
prototypea}
prototypea}
prototypea}
process finished with exit code 0
從執行結果來看原始物件和轉殖物件的屬性都改變了。深轉殖,我就不用多說了吧,就是什麼都是單獨的!全部複製,然後各自獨立。你修改轉殖物件對於原型物件沒有絲毫影響。
**實現之需要在對應的屬性類上再次實現 cloneable 介面以及用 object 的 clone 方法就可以了。
public class prototypea implements cloneable
public void setid(int id)
public prototypea01 getprototypea01()
public void setprototypea01(prototypea01 prototypea01)
@override
protected object clone() throws clonenotsupportedexception
@override
public string tostring() ';
}}public class prototypea01 implements cloneable
public void setid(int id)
@override
protected object clone() throws clonenotsupportedexception
@override
public string tostring() ';
}}public class testmain
}
執行結果prototypea}
prototypea}
prototypea}
prototypea}
process finished with exit code 0
從結果來看都是單獨的!全部複製,然後各自獨立。
總結
原型模式的prototype類必須繼承cloneable介面,並對介面中的clone方法進行實現。
優點
使用原型模型建立乙個物件比直接new乙個物件更有效率,因為它直接操作記憶體中的二進位製流,特別是複製大物件時,效能的差別非常明顯。
缺點
在實現深轉殖時需要編寫較為複雜的**,而且當物件之間存在多重簽到引用時,為了實現深轉殖,每一層物件對應的類都必須支援深轉殖,實現起來會比較麻煩。
設計模式之原型模式學習
原型模式是一種建立型模式,它採取複製原型物件的方法來建立物件的例項。使用原型模式建立的例項,具有與原型一樣的資料。1 由原型物件自身建立目標物件。也就是說,物件建立這一動作發自原型物件本身。2 目標物件是原型物件的乙個轉殖。也就是說,通過原型模式建立的物件,不僅僅與原型物件具有相同的結構,還與原型物...
設計模式之原型模式
原型模式其實就是從乙個物件再建立乙個可定製的物件,而且不需要知道建立的細節。具體就是說通過複製或者轉殖乙個原型物件產生新的物件 轉殖物件 分為兩種 深複製或者淺複製,這兩種的主要區別是 在原型中如果有物件的引用,淺複製是將引用複製過來了,也就是淺複製和原型中的物件的引用相同,而深複製是將轉殖物件中引...
設計模式之原型模式
include include 此練習為原型模式方法的練習 原型模式揭示了在同一原型上可以通過複製使得 只需要例項化一次,再通過相應的類函式操作可以得到 同一原型下的不同的版本物件 此練習將考慮在實際開發中 比如 工作經歷也是作為乙個類被含在簡歷類中的情況 這情況將涉及到類的引用和深 淺複製 原型基...