23种设计模式-原型模式
概述
用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象
结构
原型模式包含如下角色:
- 抽象原型类:规定了具体原型对象必须实现的clone方法
- 具体原型类:实现抽象原型类的clone方法,它是可被复制的对象。
- 访问类:使用具体原型类中的clone方法来复制新的对象
实现
/**
* 抽象原型类
*/
abstract class Mobile
{
protected $account;
abstract public function __clone();
public function getAccount()
{
return $this->account;
}
public function setAccount($account)
{
$this->account = $account;
}
}
/**
* 具体原型类
*/
class Xiaomi14 extends Mobile
{
public function __clone()
{
// TODO: Implement __clone() method.
}
}
$mobile = new Xiaomi14();
// 设置账户
$mobile->setAccount('ydz');
echo $mobile->getAccount();
// 买了新手机
$newMobile = clone $mobile;
// 看看是谁的账户
echo $newMobile->getAccount();
// 重新设置账户
$newMobile->setAccount('new');
// 看看新手机账户是否修改
echo $newMobile->getAccount();
// 看看旧手机账户
echo $mobile->getAccount();
var_dump($newMobile instanceof Xiaomi14);