設計模式 原型模式

2021-09-01 02:40:11 字數 1153 閱讀 1862

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

a.類初始化需要消耗非常多的資源,包括資料資源、硬體資源,通過原型複製,避免這種資源消耗。

b.通過new產生乙個物件需要非常繁瑣的資料準備或訪問許可權。

c.乙個物件需要提供給其他物件訪問,而且各個呼叫者都需要修改其值時,可以考慮複製多個物件供呼叫者使用,實現保護性拷貝。

通過實現cloneable介面和覆寫clone方法實現原型模式

//文件物件 實現cloneable介面

public class worddoc implements cloneable

public string gettxt()

public void settxt(string txt)

public string getmimages()

public void setmimages(string mimages)

public string showdoc()

//覆寫clone方法

@override

protected worddoc clone() catch (exception e)

return null;}}

public static void main(string args)
輸出:

注意clone方法並不是cloneable介面中的,而是object中的方法,cloneable也是乙個介面標識,它表明這個類的物件是可拷貝的,如果沒有實現cloneable介面卻呼叫了clone()會丟擲異常。

還用通過clone拷貝的物件並不會執行建構函式!如在建構函式中需要有特殊的初始化操作型別,在使用cloneable實現拷貝的時候需要注意建構函式不會執行。

還需要注意深拷貝淺拷貝問題,即在拷貝物件的時候,對引用型的字段也要採用拷貝的形式。

原型模式本質上是物件的拷貝,可以解決對構建複雜物件資源消耗問題,還有乙個重要用途就是保護性拷貝,如果這個物件是唯讀物件,可以通過返回乙個物件的拷貝的形式。

優點:原型模式是記憶體中二進位製流的拷貝,要比直接new物件效能好很多

缺點:開發過程中要主要建構函式不會執行的問題

設計模式 原型模式

1.首先分析原型模式的由來 一般來說,建立乙個物件可以由以下方法 知道物件的具體型別,直接用new生成。不知道型號,知道相應的需求,可以使用工廠方法模式。根據乙個已有的物件來複製為乙個新的物件,可以使用原型模式。2.原型模式可以簡單理解為拷貝原型物件得到新的物件。想象乙個配鑰匙的小店,給店主乙個原有...

設計模式 原型模式

魔術師手拿一張百元大鈔,瞬間又變出兩張。也像配鑰匙一樣,拿一把鑰匙,老師傅就能做出另乙個一模一樣的。像這種複製我們並不陌生,類似於我們設計中的原型模式 本文將從以下幾點 原型模式 概述 結構圖 淺複製深複製 總結 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。允許乙個物件再建立另外...

設計模式 原型模式

原型模式 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。1 假設我們現有乙個物件,但是它的型別需要執行期確定,我們不知道它的動態型別是什麼,現在我們想建立它的副本。顯然通過建構函式建立是很麻煩的,這時候我們可以使用原型模式中的clone函式直接得到該物件的副本。2 有些時候我們想要...