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

总结

说白了原型模式就是克隆的一种玩法,不需要想象的太过于复杂。简单来说他就是克隆!

上一篇下一篇

猜你喜欢

热点阅读