定義(From 百度百科)
以原型實例指定建立物件的種類,並且透過拷貝這些原型建立新的物件。
UML類別圖表:
#
public class Client {public static void main(String[] args) {// Director d = new Director(new ConcreteBuilder());// d.construct();ConcretePrototype1 prototype = new ConcretePrototype1();for (int i = 0; i < 10; i++) { ConcretePrototype1 x = (ConcretePrototype1) prototype.clone(); x.test1(); } } }public class Prototype implements Cloneable {public Prototype clone() { Prototype prototype = null;try{ prototype = (Prototype)super.clone(); }catch(CloneNotSupportedException e){ e.printStackTrace(); }return prototype; } }public class ConcretePrototype1 extends Prototype {public void test1() { System.out.println(this); System.out.println("123"); } }##########各部分說明:######Prototype 原型類別實作Cloneable介面。 ###ConcretePrototype1 原型類別Prototype的子類別#########模式詳細說明:######透過複製複製一個物件實例###複製出來的新的物件複製原始實例的值# ########原型模式的注意事項:###### 使用原型模式複製物件不會呼叫類別的建構方法。因為物件的複製是透過呼叫Object類別的clone方法來完成的,連存取權限都對原型模式無效。還記得單例模式嗎?在單例模式中,###只要將建構方法的存取權限設定為private型,就可以實作單例。但是clone方法直接無視構造方法的權限,所以,單例模式與原型模式是衝突的,使用時要特別注意。 ### clone方法,執行的是淺拷貝,也就是說如果是引用類型的屬性,則它不會進行拷貝,而是只拷貝引用。 ############優缺點:######優點:###clone方法是由虛擬機器直接複製記憶體區塊執行,速度比new快很多###運行時取得對象而對應的狀態###缺點: ###Prototype必須實作clone方法,如果Prototype裡的屬性很多引用類型,甚至物件裡的應用,那就要遞歸實作clone方法,會很複雜,新增引用屬性時,會去更改clone方法的實作。 ###
以上是設計模式之原型模式實例教程的詳細內容。更多資訊請關注PHP中文網其他相關文章!