有些場景中,存在大量相同或相似物件的建立問題,如果用傳統的建構函式來建立物件,會比較複雜且耗時耗資源,用原型模式生成物件就很高效。
比如王者裡面的小兵,只需建立乙個小兵的原型,之後就只需要進行轉殖複製就行了。
一、定義
原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。原型類必須實現cloneable介面,實現clone方法。
二、例項
建立乙個小兵的原型
public class batmanprototype implements cloneable
}1、血量沒有實現cloneable方法
public class blood
測試類:
batmanprototype batmanprototype = new batmanprototype();
batmanprototype.setx(10d);
batmanprototype.sety(10d);
batmanprototype.setblood(new blood(100));
batmanprototype cloneobject = (batmanprototype) batmanprototype.clone();
system.out.println("prototype:"+batmanprototype);
system.out.println("clone:"+cloneobject);
1、修改原型血量
batmanprototype.getblood().setblood(99);
system.out.println("***********************************====");
system.out.println("prototype:"+batmanprototype);
system.out.println("clone:"+cloneobject);
結果如下:
我在**中只修改了原型的血量,但是從結果看,轉殖出來的類的血量也被修改了,這就是淺轉殖,只是簡單的將位址賦值給了物件,只要原型一變,轉殖物件也會改變。
概念:那麼如何使用深轉殖呢?
這就需要重寫原型的clone方法以及原型屬性需要實現cloneable介面。
public class batmanprototype implements cloneable
}public class blood implements cloneable
}
再用之前的測試類進行測試:
atmanprototype batmanprototype = new batmanprototype();
batmanprototype.setx(10d);
batmanprototype.sety(10d);
batmanprototype.setblood(new blood(100));
batmanprototype cloneobject = (batmanprototype) batmanprototype.clone();
system.out.println("prototype:"+batmanprototype);
system.out.println("clone:"+cloneobject);
1、修改原型血量
batmanprototype.getblood().setblood(99);
system.out.println("***********************************====");
system.out.println("prototype:"+batmanprototype);
system.out.println("clone:"+cloneobject);
結果:
此時轉殖物件的血量就不會隨著原型變化而變化了。
三、原始碼例項
實現了cloneable的介面都屬於這種模式。
我是liusy,乙個喜歡健身的程式設計師。
來都來了,關注一波再溜唄。
設計模式之原型模式
原型模式其實就是從乙個物件再建立乙個可定製的物件,而且不需要知道建立的細節。具體就是說通過複製或者轉殖乙個原型物件產生新的物件 轉殖物件 分為兩種 深複製或者淺複製,這兩種的主要區別是 在原型中如果有物件的引用,淺複製是將引用複製過來了,也就是淺複製和原型中的物件的引用相同,而深複製是將轉殖物件中引...
設計模式之原型模式
include include 此練習為原型模式方法的練習 原型模式揭示了在同一原型上可以通過複製使得 只需要例項化一次,再通過相應的類函式操作可以得到 同一原型下的不同的版本物件 此練習將考慮在實際開發中 比如 工作經歷也是作為乙個類被含在簡歷類中的情況 這情況將涉及到類的引用和深 淺複製 原型基...
設計模式之原型模式
原型模式的思想就是將乙個物件作為原型,對其進行複製 轉殖,產生乙個和原物件類似的新物件 複製過程可分為淺複製和深複製。淺複製是指直接呼叫父類 即object類 的clone方法 super.clone 該方法是本地 native 方法,呼叫該方法clone出來的新物件,基本資料型別的屬性變數是新建立...