php 设计模式之 原型,克隆
1. 原型模式
原型模式又称克隆模式
对对象进行克隆,但是又把被克隆的对象称之为最初的原型,或者实例化过后的对象
2. 实列
interface ServiceProvicer {
public function getSystem();
}
class ChinaMobile implements ServiceProvicer {
public $system;
public function getSystem(){
return "中国移动" . $this->system;
}
}
class ChinaUnicom implements ServiceProvicer {
public $system;
public function getSystem(){
return "中国联通" . $this->system;
}
}
class Phone {
public $service_province;
public $cpu;
public $rom;
}
class CMPhone extends Phone {
function __clone()
{
// $this->service_province = new ChinaMobile(); // 浅复制
// 被复制对象的所有变量与原来对象值相同
}
}
class CUPhone extends Phone {
function __clone()
{
$this->service_province = new ChinaUnicom(); // 深复制
// 把引用对象的变量指向复制过的新对象
}
}
$cmPhone = new CMPhone();
$cmPhone->service_province = new ChinaMobile();
$cmPhone->service_province->system = 'TD-CDMA';
$cmPhone1 = clone $cmPhone; // 复制原型,浅复制
$cmPhone1->service_province->system = 'TD-CDMA2';
echo $cmPhone->service_province->getSystem(); // 中国移动TD-CDMA2
echo $cmPhone1->service_province->getSystem(); // 中国移动TD-CDMA2
$cuPhone = new CUPhone();
$cuPhone->service_province = new ChinaUnicom();
$cuPhone->service_province->system = 'WCDMA';
$cuPhone1 = clone $cuPhone; // 复制原型,深复制
$cuPhone1->service_province->system = 'WCDMA1';
echo $cuPhone->service_province->getSystem(); // 中国联通WCDMA
echo $cuPhone1->service_province->getSystem(); // 中国联通WCDMA1
3. 使用场景
- 减少创建对象时的开销

浙公网安备 33010602011771号