設計模式之原型模式

2021-10-25 05:43:55 字數 2208 閱讀 5411

有些場景中,存在大量相同或相似物件的建立問題,如果用傳統的建構函式來建立物件,會比較複雜且耗時耗資源,用原型模式生成物件就很高效。

比如王者裡面的小兵,只需建立乙個小兵的原型,之後就只需要進行轉殖複製就行了。

一、定義

原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。原型類必須實現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出來的新物件,基本資料型別的屬性變數是新建立...