本文已参与「新人创作礼」活动,一起开启掘金创作之路。
设计模式之原型模式--打印机快速复制的原理
原型模式是一个克隆模式,以一个原型进行克隆,复制。
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
为什么要使用原型模式
因为原型模式可以克隆整个对象而不用重新生成。
如果有一个订单对象,你要是重新生成,需要再次查询数据库,这是一个很耗时的操作,如果直接复制就不需要耗时了。
在php里面实现很简单,每个类有__clone魔术方法,实现这个方法就好了。
先看不实现这个方法的克隆。
/**
* 原型模式
* 实现__clone魔术方法
*/
class Prototype {
public $name = '张三';
public $arr = ['1', '2'];
}
$obj1 = new PrototypeClass;
dump($obj1);
$obj2 = clone $obj1;
$obj2->name = '456';
dump($obj2);
可以看到成功克隆过来了,两个对象互不影响。
我们看一下修改第二个对象的arr属性呢
$obj1 = new PrototypeClass;
dump($obj1);
$obj2 = clone $obj1;
$obj2->name = '456';
$obj2->arr = ['1'];
dump($obj2);
修改数组也没问题,也就是说,直接使用clone就可以完成深复制的拷贝操作。php本身通过clone关键字完成了原型模式。