原型設計模式: 用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象。 原型設計模式簡單的來說,顧名思義, 不去創建新的對象進而保留原型的一種設計模式。 缺點:原型設計模式是的最主要的缺點就是這個克隆方法需要對類的功能進行檢測,這對於全新的類來說較容易,但對已有的類進行改造時將不是件容易的 ...
原型設計模式: 用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象。
原型設計模式簡單的來說,顧名思義, 不去創建新的對象進而保留原型的一種設計模式。
缺點:
原型設計模式是的最主要的缺點就是這個克隆方法需要對類的功能進行檢測,這對於全新的類來說較容易,但對已有的類進行改造時將不是件容易的事情;
interface Prototype { public function copy(); }
原型類:
class PrototypeDemo implements Prototype { private $_name; public function __construct($name) { // 這裡可能是複雜的邏輯 $this->_name = $name; } public function getMul() { return $this->_name * $this->_name; } public function copy() { // 克隆後的邏輯 $this->_name ++; return clone $this; } }
客戶類: // 輸入10
// 客戶類 class Client { public function main() { $pro1 = new PrototypeDemo('10'); echo $pro1->getMul(); echo "<br>"; $pro2 = $pro1->copy(); echo $pro2->getMul(); } }
調用客戶端:
$obj = new Client(); $obj->main();
輸出結果:
100 121
顯示傳入10 然後 getMul 方法做 乘方運算 得到 10*10 = 100
然後克隆對象, 原型類的 copy 方法 被執行時, $_name 自增 1(克隆的邏輯) 後再去 做乘法運算,得到11*11 = 121