原型模式,用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。
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執行:
考慮乙個問題,需要傳送郵件的數量很多的話,會很耗時。這時可以用我們今天的講的原型模式,來「轉殖」出屬性一致的物件來實現。
下面修改了乙個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
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進行了拷貝:
設計模式 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...