java設計模式之原型模式

2021-08-21 21:33:18 字數 2993 閱讀 7523

定義:原型模式就是用原型例項指定建立物件的種類,並且通過複製這些原型建立新的物件。

在應用程式中,有些物件比較複雜,其建立過程過於複雜,而且我們又需要頻繁的利用該物件,如果這個時候我們按照常規思維new該物件,那麼務必會造成資源浪費,這個時候我們就希望可以利用乙個已有的物件來不斷對他進行複製就好了,這就是程式設計中的「轉殖」。原型模式直接操作底層二進位製流,在建立複雜物件是效率提公升明顯。

uml類圖:

淺轉殖與深轉殖:

淺轉殖:

public class person implements cloneable 

public string getname()

public void setname(string name)

public boolean isgender()

public void setgender(boolean gender)

public interest getinterest()

public void setinterest(interest interest)

@override

public string tostring() ';

}@override

protected object clone() throws clonenotsupportedexception

public static void main(string args) throws clonenotsupportedexception

}class interest

public string getname()

public void setname(string name)

@override

public string tostring() ';}}

執行結果:

淺轉殖對於引用型別,只轉殖了引用,因此兩個物件的interest公共同乙個記憶體位址,乙個物件變化,會引起另乙個物件響應的變化。

深轉殖:

public class person implements cloneable 

public string getname()

public void setname(string name)

public boolean isgender()

public void setgender(boolean gender)

public interest getinterest()

public void setinterest(interest interest)

@override

public string tostring() ';

}@override

protected object clone() throws clonenotsupportedexception

public static void main(string args) throws clonenotsupportedexception

}class interest implements cloneable

public string getname()

public void setname(string name)

@override

protected object clone() throws clonenotsupportedexception

@override

public string tostring() ';}}

執行結果:

person}

person}

person}

通過對引用型別值interest新增clone方法,並且對person物件的clone方法改造,實現深轉殖。

此外還可以通過序列化和反序列化的方式實現深複製。

public class person implements serializable 

public string getname()

public void setname(string name)

public boolean isgender()

public void setgender(boolean gender)

public interest getinterest()

public void setinterest(interest interest)

@override

public string tostring() ';

}public static void main(string args) throws clonenotsupportedexception,classnotfoundexception,ioexception

}class interest implements serializable

public string getname()

public void setname(string name)

@override

public string tostring() ';}}

執行結果:

person}

person}

person}

優點:缺點:

此外clone物件時,不呼叫構造方法,無視構造方法的許可權。

Java設計模式之原型模式

作為物件的建立模式,與單例模式形成對比,用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。原型模式要求物件實現乙個可以 轉殖 自身的介面,這樣就可以通過複製乙個例項物件本身來建立乙個新的例項。這樣一來,通過原型例項建立新的物件,就不再需要關心這個例項本身的型別,只要實現了轉殖自身的方法...

設計模式之原型模式 java

原型模式 prototype 是一種建立型設計模式,原型模式允許乙個物件再建立另外乙個可定製的物件,根本無需知道任何如何建立的細節。工作原理是 通過將乙個原型物件傳給那個要發動建立的物件,這個要發動建立的物件通過請求原型物件拷貝它們自己來實施建立。原型類prototype宣告乙個轉殖方法,由具體原型...

Java設計模式 原型模式

原型模式是乙個建立型的模式。該模式有乙個樣板例項,使用者從這個樣板物件中複製出乙個內部屬性一致的物件,這個過程也就是俗稱的 轉殖 被複製的例項就是所稱的 原型 原型模式 用原型例項指定建立物件的種類,並通過拷貝這些原型建立新的物件 通過實現cloneable介面 public class wordd...