其实就是克隆,将一个实例化后的对象,克隆下来,就可以得到一个实例化后的对象,不需要走构造函数等一些列的操作<br />用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象<br />创建一个大对象需要很大的开销,每次new 都会消耗很大,原型模式仅仅需要内存拷贝就可<br />拷贝分为浅拷贝跟深拷贝<br />浅拷贝:直接拷贝一份,原型内的实例化对象指向的内存空间跟,拷贝后的对象指向空间一致,一旦对象改变,原型也会改变<br />深拷贝:拷贝之后,实例化对象内的指向空间不一致,个改个的
<?php
/**
* 抽象类
*/
abstract class Prototype
{
public function __construct()
{
echo '初始化' . PHP_EOL;
}
abstract public function __clone();
}
/**
* 引用类
*/
class name
{
public $free = '我是第一次呢';
}
/**
* 抽象实例化类原型
*/
class Concreate1 extends Prototype
{
public $v;
public function name()
{
$name = new name();
$this->v = $name;
}
public function __clone()
{
//深克隆方法1 重现实例化
// $name = new name();
// $this->v = $name;
}
}
$Concreate1 = new Concreate1;
$Concreate1->name();
//拷贝
$Concreate2 = clone $Concreate1;
//深克隆方法2 序列化,反序列化
//$Concreate2 = serialize($Concreate2);
//$Concreate2 = unserialize($Concreate2);
echo $Concreate1->v->free . PHP_EOL;
echo $Concreate2->v->free . PHP_EOL;
$Concreate2->v->free = '看什么看';
echo $Concreate1->v->free . PHP_EOL;
echo $Concreate2->v->free . PHP_EOL;
//-----------浅拷贝
//初始化
//我是第一次呢
//我是第一次呢
//我是第一次呢
//看什么看
//-----------深拷贝
//初始化
//我是第一次呢
//我是第一次呢
//看什么看
//看什么看