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

2021-09-14 03:14:20 字數 2077 閱讀 4810

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

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...