手记

【九月打卡】第9天--大话PHP设计模式第十章节原型模式

课程名称:大话PHP设计模式

课程章节: 10-1PHP原型模式
课程链接

主讲老师:Rango

课程内容

给出了原型模式的定义,然后通过代码演示让我们更加深入了解到原型模式的实现原理,当大对象的创建时可以使用到这种模式。

作者:万万的小刀
链接:https://www.imooc.com/article/329558
来源:慕课网

课程收获

定义

原型模式是一种创建型设计模式, 使你能够复制已有对象, 而又无需使代码依赖它们所属的类。所有的原型类都必须有一个通用的接口, 使得即使在对象所属的具体类未知的情况下也能复制对象。

原型对象可以生成自身的完整副本, 因为相同类的对象可以相互访问对方的私有成员变量。

理解

1、与工厂模式作用类似,都是用来创建对象

2、与工厂模式的实现不同,原型模式是先创建好一个原型对象,然后通过clone原型对象来创建新的对象。这样就免去了类创建时重复的初始化操作。

优势

原型模式适用于大对象的创建。创建一个大对象需要很大的开销,如果每次new就会消耗很大,原型模式仅通需内存拷贝即可

代码实现

class Canvas
{
    public $data;

    function init($width = 20, $height = 10)
    {
        $data = [];
        for ($i = 0; $i < $height; $i++) { 
            for ($j = 0; $j < $width; $j++) { 
                $data[$i][$j] = '*';
            }
        }
        $this->data = $data;
    }

    function draw()
    {
        foreach ($this->data as $line) {
            foreach ($line as $char) {
                echo $char;
            }
            echo "<br />\n";
        }
    }

    function rect($a1, $a2, $b1, $b2)
    {
        foreach ($this->data as $k1 => $line) {
            if ($k1 < $a1 || $k1 > $a2) 
                continue;
            foreach ($line as $k2 => $char) {
                if ($k2 < $b1 || $k2 > $b2)
                    continue;
                $this->data[$k1][$k2] = '&nbsp;';
            }
        }
    }
}

$prototype = new Canvas;
$prototype->init();

$canvas1 = clone $prototype;
$canvas1->rect(3, 6, 4, 12);
$canvas1->draw();

echo "<hr />";

$canvas2 = clone $prototype;
$canvas2->rect(1, 3, 2, 6);
$canvas2->draw();

课程截图

0人推荐
随时随地看视频
慕课网APP