原型模式
原型模式就是需要建立多個例項的時候,以乙個為原型,其他例項複製/轉殖這個原型來獲得相似的例項。
我們的實驗室最近研究這個模式還是因為市場的原因,市場上由於長久以來的習俗和政策,對女人的需求比較大,所有我們就的擴大女人的生產線,但是由於資金的原因,我們不能投入硬體成本只能改進我們的方法。
首先我們得分析女人的構成:
classnvren
}
我們以前生產女人的時候我們把預設好的名字,頭型,身型,型別在建立女人的時候傳入(好吧,我承認女人很難懂,但我們春秋筆法下~~)。
publicclass
prototype
}
研究了很久,我們的市場部經理終於有了想法:由於高富帥客戶不需要我們的產品,現在需求我們產品的客戶基本上都屬於醜矮窮搓擼的型別,他們對我們的產品也沒有多少要求,只要有不同名字就行,我覺得我們可以批量生產女人,出廠的時候再給他們設定下不同的名字就行了,所以我們更改了我們的女人類:
class nvren implementscloneable
public
void
setname(string name)
@override
protected
nvren clone()
catch
(clonenotsupportedexception e)
return
nr; }
}
publicclass
prototype
}
當我們的產品投放到市場的時候,卻很是悲摧了,因為他們投訴我們生產的女人只有乙個卻頂著不同的名字到處賣。
我們只能再次研究,最後發現我們的乙個工程師為了更加方便的生產,對我們的女人類作了些改變:
classrouti
}class nvren implements
cloneable
private
nvren(string name, routi routi)
public
void
setname(string name)
public
routi getrouti()
@override
protected
nvren clone()
catch
(clonenotsupportedexception e)
return
nr; }
}
我們做了一些測試發現這些女人雖然有不同的名字,但是她們共用乙個肉體
publicclass
prototype }//
------> output
經研究發現:當我們使用clone方法的時候,我們做的只是淺轉殖,淺轉殖只會複製值型別的屬性,引用型別的屬性只會複製其引用(即指標)而不會複製整個引用的物件。
所以我們要轉殖女人的時候還得轉殖肉體:
class routi implementscloneable
@override
protected
routi clone()
catch
(clonenotsupportedexception e)
return
rt; }
}class nvren implements
cloneable
private
nvren(string name, routi routi)
public
void
setname(string name)
public
routi getrouti()
@override
protected
nvren clone()
}
這時我們就能得到正確的結果:不同的女人有不同的肉體
//--->output
這是我們的乙個宅男工程師提出乙個問題: 當我們的的肉體類種新加乙個屬性叫likewho,並且 值是女人類:
private nvren likewho;
哥只能說:遇到這種情況,要麼是你的女人類設計得有問題,要麼就只能放棄原型模式。
設計模式筆記四 原型模式
基本介紹 原型模式 prototype 模式 是指 用原型例項指定建立物件的種類,並且通過拷貝這些原型,建立新的物件 原型模式是一種建立型設計模式,允許乙個物件再建立另外乙個可定製的物件,無需知道如何建立的細節 工作原理是 通過將乙個原型物件傳給那個要發動建立的物件,這個要發動建立的物件通過請求原型...
四 Python 設計模式之原型模式
原型模式的目的是轉殖物件 或者 副本 類似於淺拷貝和深拷貝 淺拷貝就是 副本依賴引用 深拷貝就是 完全轉殖乙份 以下是簡單的例子 import copy class a def init self self.x 18 self.msg hello class b a def init self a....
設計模式之原型模式
原型模式其實就是從乙個物件再建立乙個可定製的物件,而且不需要知道建立的細節。具體就是說通過複製或者轉殖乙個原型物件產生新的物件 轉殖物件 分為兩種 深複製或者淺複製,這兩種的主要區別是 在原型中如果有物件的引用,淺複製是將引用複製過來了,也就是淺複製和原型中的物件的引用相同,而深複製是將轉殖物件中引...