設計模式 7 原型模式詳解 易懂

2021-09-11 11:39:57 字數 2513 閱讀 1474

原型模式,用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。

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

模型:

通過模型發現,就是通過clone()方法來實現對物件的拷貝。

比如某平台舉行**送福利的活動,中獎的通知以郵件形式傳送。思考一下,這裡需要乙個郵件mail類用來填寫姓名,內容等資訊。

下面例項說明,先寫普通mail類和呼叫,然後再寫出原型模式的。

**1.**沒有實現clone()方法的mail類:

public class mail  

public string getname

() public void setname(string name)

public string getaddress

() public void setaddress(string address)

public string getcontent

() public void setcontent(string content)

}複製**

**2.**呼叫

private int mail_count=10;

mail mail=new mail();

for (int i=0;i"姓名"+i);

mail.setaddress("www.***"+i+".com");

mail.setcontent("***xx");

sendmail(mail);

}public void sendmail (mail mail)

複製**

執行:

考慮乙個問題,需要傳送郵件的數量很多的話,會很耗時。這時可以用我們今天的講的原型模式,來「轉殖」出屬性一致的物件來實現。

下面修改了乙個mail類:

public class mail  implements  cloneable

public string getname

() public void setname(string name)

public string getaddress

() public void setaddress(string address)

public string getcontent

() public void setcontent(string content)

@override

protected mail clone() throws clonenotsupportedexception catch (clonenotsupportedexception e)

return mail;

}}複製**

呼叫:

try 

} catch (clonenotsupportedexception e)

public void sendmail (mail mail)

複製**

執行:

原型模式是在記憶體中二進位製流的拷貝,要比直接new乙個物件效能好很多,尤其是建構函式比較複雜,並且在迴圈體中生產出大量的物件時,用原型模式效率很高。

原型模式-在拷貝時建構函式是不執行的。(上面的例子中已經發現了)

淺拷貝:在通過clone() 方法實現拷貝物件時,只是對物件的拷貝,而沒有對原生物件的其他因素進行拷貝,所以拷貝出的物件還指向原生的。

深拷貝:這就好理解了,拷貝物件和原生物件是分開的。

下面通過乙個例子來說明一下:

public class text implements  cloneable

public void setlist(string str)

public arraylistgetlist

() }

複製**

呼叫:

text text=new text();

text text_clone=text.clone();

text.setlist("1");

text_clone.setlist("2");

log.e("qzs",text.getlist()+"");

複製**

我只列印的是原生物件的集合,但是執行的結果確實:

正好印證了我前面說的,這是淺拷貝。

如果想要深拷貝,在clone()方法中改一下就可以了,其實就是對私有的變數list進行了拷貝:

@override

protected text clone() throws clonenotsupportedexception

複製**

設計模式 7 原型模式詳解 易懂

原型模式,用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。prototype原型模式是一種建立型設計模式,prototype模式允許乙個物件再建立另外乙個可定製的物件,根本無需知道任何如何建立的細節,工作原理是 通過將乙個原型物件傳給那個要發動建立的物件,這個要發動建立的物件通過請求...

設計模式 7 原型模式

目的 當需要多次例項化同乙個物件時,可以通過 clone 已有物件的方式避免多次例項化,從而節約效能。1.雛形 抽象原型類 public abstract class prototype public class companey public string place 具體原型類 public c...

設計模式詳解 原型模式

是指原型例項指定建立物件的種類,並通過拷貝這些原型建立新的物件。而呼叫者不需要知道任何建立細節,不呼叫建構函式 其實就是如何快速構建物件的方法總結,比如簡單工廠將getter setter封裝到某個方法中 jdk提供實現cloneable介面,實現快速複製。當初在spring配置scope prot...