原型设计模式: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
原型设计模式简单的来说,就是不去创建新的对象进而保留原型的一种设计模式。
缺点:
原型设计模式是的最主要的缺点就是这个克隆方法需要对类的功能进行检测,这对于全新的类来说较容易,但对已有的类进行改造时将不是件容易的事情;
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