(《設計模式解析與實戰》讀書筆記)
一、定義
用原型例項指定建立物件的種類,並通過拷貝這些原型建立新的物件;
二、使用場景
(1)類初始化需要消化非常多的資源,這個資源包括資料、硬體資源等,通過原型拷貝避免這些消耗;
(2)通過new產生乙個物件需要非常繁瑣的資料準備或訪問許可權,這時可使用原型模式;
(3)乙個物件需要提供給其他物件訪問,而且各個呼叫者可能都需要修改其值時,可以考慮使用原型模式拷貝多個物件供呼叫者使用,即保護性拷貝。
三、簡單示例
修改乙份文件,我們一般不會直接修改「原型」,而是拷貝乙份副本進行修改。
/**
* 文件是具體的原型類;cloneable是介面,宣告具備clone能力
*/public
class
worddocument
implements
cloneable
@override
protected worddocument clone() catch (exception e)
return
null;
}public string getmtext()
public
void
setmtext(string mtext)
public arraylistgetmimages()
public
void
addimages(string img)
/*** 列印文件內容
*/public
void
showdocument()
system.out.println("-----列印結束-----");}}
public
class client
}輸出後的結果:
可以看出在副本上修改不會影響到原型。並且通過clone拷貝物件時並不會執行建構函式。
修改client**:
// 修改文件副本
document2.setmtext("這是修改後的副本");
document2.addimages("副本.jpg");
document2.showdocument();
執行結果:
會發現原型被修改了。原因是上述方法只是淺拷貝,document2的mimages只是單純的指向了this.mimages引用,並沒有重新構造乙個mimages物件。
運用深拷貝可解決這個問題,在拷貝時,對於引用型的字段也要採用拷貝的形式,而不是引用的形式。
修改clone()方法:
@override
protected worddocument clone() catch (exception e)
return
null;
}
執行後發現副本新增並不會影響到原型。
所以在使用該模式時盡量使用深拷貝,避免操作副本時影響原始物件的問題。
四、優缺點
優點:
執行模式是在記憶體中二進位製流的拷貝,要比直接new乙個物件效能好很多,特別是要在乙個迴圈體內產生大量的物件時,原型模式可以更好的體現其優點。
缺點:
直接在記憶體中拷貝,建構函式是不會執行的,在實際開發中應該注意這個潛在的問題。優點是減少了約束,缺點也是減少了約束,需要我們在實際應用中考慮。
建立型模式 原型模式
使用原型例項指定建立物件的種類,並且通過轉殖這些原型建立新的物件 原理是將乙個原型物件傳給要發動建立的物件,該物件通過請求原型物件轉殖自己來建立過程 轉殖方法 public prototype clone jdk中為我們提供了轉殖的方法clone 從object繼承下來,乙個物件要實現轉殖,需要實現...
建立型模式 原型模式
原型 prototype 模式主要用於建立物件的轉殖,通常其最簡單的形式就是採用自定 clone 函式並 傳入物件引數以返回此物件的乙個副本,這在 python 實作上可使用內定 copy.cop y 或 copy.deepcopy 函式來達到此目的。當已有乙個物件但對此物件的某些部分會被變更卻又想...
原型模式 建立型模式
文章首發個人部落格 如果我們有乙個類 sheep 它裡面有兩個屬性,名稱 name 年齡 age 現在我們有乙個它的例項 s1 我們需要按照這個例項的屬性再去建立兩個物件。1 sheep data public class sheep 2 main public class main 原型模式 用原...