前言
原型模式用于創(chuàng)建當前對象的克隆。當直接創(chuàng)建對象的代價比較大時弹沽,則采用這種模式追迟。例如溶其,一個對象需要在一個高代價的數(shù)據(jù)庫操作之后被創(chuàng)建。我們可以緩存該對象敦间,在下一個請求時返回它的克隆瓶逃,在需要的時候更新數(shù)據(jù)庫束铭,以此來減少數(shù)據(jù)庫調(diào)用。
代碼
//定義一個巨大的文本類(假設創(chuàng)建它的時候內(nèi)存消耗很大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;
//構造函數(shù)加載一次那個巨大的類 (重點)
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";
}
// 對引用執(zhí)行深復制(重點)
function __clone()
{
$this->company = clone $this->company;
}
}
$resume = new Archives("蛇精病俱樂部");
$resume->setInfo("張小帥", "男", 24);
$resume->setWork("WEB開發(fā)部", "PHP工程師");
$resume2 = clone $resume;
$resume2->setInfo("王明明", "男", 40);
$resume2->setWork("WEB開發(fā)部", "產(chǎn)品經(jīng)理");
$resume3 = clone $resume2;
$resume3->setInfo("孫苦苦", "女", 18);
$resume3->setWork("WEB開發(fā)部", "程序員鼓勵師");
$resume->show();
$resume2->show();
$resume3->show();
輸出
image.png
總結
說白了原型模式就是克隆的一種玩法厢绝,不需要想象的太過于復雜契沫。簡單來說他就是克隆昔汉!