原型模式,用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。
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...