學習設計模式之原型模式

2022-09-01 16:27:16 字數 2845 閱讀 9139

原型模式

用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。

結構圖

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 此練習為原型模式方法的練習 原型模式揭示了在同一原型上可以通過複製使得 只需要例項化一次,再通過相應的類函式操作可以得到 同一原型下的不同的版本物件 此練習將考慮在實際開發中 比如 工作經歷也是作為乙個類被含在簡歷類中的情況 這情況將涉及到類的引用和深 淺複製 原型基...