原型模式(Prototype Pattern):與原廠模式類似,都是用來建立對象的。利用複製來產生一個大對象,減少建立時的初始化等操作佔用開銷
為什麼需要原型模式
1,有些時候,我們需要建立多個類似的大對象。如果直接通過new對象,開銷很大,而且new完還得進行重複的初始化工作。可能把初始化工作封裝起來的,但是對於系統來說,你封不封裝,初始化工作還是要執行。
2,原型模式則不同,原型模式是先建立好一個原型對象,然後通過clone這個原型對象來建立新的對象,這樣就免去了重複的初始化工作,系統僅需記憶體拷貝即可。
<?php/*** 原型模式** @author webff*//**//聲明一個複製自身的介面interface Prototype { function copy(); } //產品要實現複製自身的操作class Student implements Prototype { //簡單起見,這裡沒有使用get set public $school; public $major; public $name; public function construct($school, $major, $name) { $this->school = $school; $this->major = $major; $this->name = $name; } public function printInfo() { printf("%s,%s,%sn", $this->school, $this->major, $this->name); } public function copy() { return clone $this; }}$stu1 = new Student('清華大學', '電腦', '張三');$stu1->printInfo();$stu2 = $stu1->copy();$stu2->name = '李四';$stu2->printInfo();?>
這裡可以看到,如果類的成員變數非常多,如果由外部建立多個新對象再一個個賦值,則效率不高代碼冗餘也容易出錯,通過原型拷貝複製自身再進行微小修改就是另一個新對象了。