PHP设计模式:原型模式
2019-06-19 本文已影响0人
Zed_790e
前言
原型模式用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。
代码
//定义一个巨大的文本类(假设创建它的时候内存消耗很大QWQ)
class Company
{
private $company;
public function setName($name)
{
$this->company = $name;
}
public function getName()
{
return $this->company;
}
}
//这个类主要用来做逻辑
class Archives
{
private $name;
private $sex;
private $age;
private $work;
private $company;
//构造函数加载一次那个巨大的类 (重点)
function __construct()
{
$this->company = new Company();
}
public function setInfo($name, $sex, $age)
{
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
public function setWork($company, $work)
{
$this->work = $work;
$this->company->setName($company);
}
public function show()
{
echo $this->name . " " . $this->sex . " " . $this->age . "\n";
echo $this->work . " " . $this->company->getName() . "\n";
}
// 对引用执行深复制(重点)
function __clone()
{
$this->company = clone $this->company;
}
}
$resume = new Archives("蛇精病俱乐部");
$resume->setInfo("张小帅", "男", 24);
$resume->setWork("WEB开发部", "PHP工程师");
$resume2 = clone $resume;
$resume2->setInfo("王明明", "男", 40);
$resume2->setWork("WEB开发部", "产品经理");
$resume3 = clone $resume2;
$resume3->setInfo("孙苦苦", "女", 18);
$resume3->setWork("WEB开发部", "程序员鼓励师");
$resume->show();
$resume2->show();
$resume3->show();
输出
image.png总结
说白了原型模式就是克隆的一种玩法,不需要想象的太过于复杂。简单来说他就是克隆!