dream

一个菜鸟程序员的成长历程

0%

设计模式之原型模式--打印机快速复制的原理

设计模式之原型模式–打印机快速复制的原理

原型模式是一个克隆模式,以一个原型进行克隆,复制。

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

为什么要使用原型模式

因为原型模式可以克隆整个对象而不用重新生成。

如果有一个订单对象,你要是重新生成,需要再次查询数据库,这是一个很耗时的操作,如果直接复制就不需要耗时了。

在php里面实现很简单,每个类有__clone魔术方法,实现这个方法就好了。

先看不实现这个方法的克隆。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
* 原型模式
* 实现__clone魔术方法
*/
class Prototype {

public $name = '张三';
public $arr = ['1', '2'];

}

$obj1 = new PrototypeClass;
dump($obj1);

$obj2 = clone $obj1;
$obj2->name = '456';
dump($obj2);

原型模式

可以看到成功克隆过来了,两个对象互不影响。

我们看一下修改第二个对象的arr属性呢

1
2
3
4
5
6
7
8
9

$obj1 = new PrototypeClass;
dump($obj1);

$obj2 = clone $obj1;
$obj2->name = '456';
$obj2->arr = ['1'];
dump($obj2);

原型模式

修改数组也没问题,也就是说,直接使用clone就可以完成深复制的拷贝操作。php本身通过clone关键字完成了原型模式。

代码放在了我的github上面。