每日一记之php原型模式
原型模式是指通过现有的实例通过拷贝得到新的实例。
在程序的设计中,有的时候我们去实例化某个对象需要做太多的初始化工作,非常耗时的时候,我们可以考虑采用原型模式来得到新的实例。
其实在php中我们很容易通过clone关键字去实现对象的复制。另外通过魔术方法__clone()指定在clone的时候需要进行的操作。这个其实就是原型模式的实现方式了。当然,有时候为了让代码看起来比较优雅,比较完善。我们可以自己去写相关的实现方式,当然也需要用到clone关键字。
class Task implements Cloneable{ public $name; public $startTime; public $parent; public function __construct($name){ //这里实例化Task需要做很多工作 $this->name = $name; $this->startTime = time(); //这里直接new一个parent $this->parent = new TaskParent("do some work"); } public function __clone(){ //在克隆的时候把startTime设为当前时间 $this->startTime = time(); //克隆parent $this->parent = clone $this->parent; //克隆的时候需要执行的操作 } public function copy(){ //return clone $this; //这里不使用clone关键字,而是使用序列化和反序列化来进行 return unserialize(serialize($this)); }}