php 八大设计模式-原型模式

原型模式的作用:对象克隆以避免创建对象时的消耗

特点:

  1. 与工厂模式类似,都是用来创建对象。
  2. 与工厂模式的实现不同,原型模式是先创建好一个原型对象,然后通过clone原型对象来创建新的对象。这样就免去了类创建时重复的初始化操作。 
  3. 原型模式适用于大对象的创建,创建一个大对象需要很大的开销,如果每次new就会消耗很大,原型模式仅需要内存拷贝即可。
<?php 
// 原型模式
class Canvas {

    private $data;

    public 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;
    }

    public function rect($x1, $y1, $x2, $y2) {
        foreach($this->data as $k1 => $line) {
            if ($x1 > $k1 or $x2 < $k1) {
                continue;
            }
            foreach($line as $k2 => $char) {
                if ($y1>$k2 or $y2<$k2) {
                    continue;
                }

                $this->data[$k1][$k2] = '#';
            }
        }
    }

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

$c = new Canvas();
$c->init();
// / $canvas1 = new Canvas();
// $canvas1->init();

$canvas1 = clone $c;//通过克隆,可以省去init()方法

$canvas1->rect(2, 2, 8, 8);
$canvas1->draw();

echo "-----------------------------------------<br>";

$canvas2 = clone $c;
$canvas2->rect(1, 4, 8, 8);
$canvas2->draw();

 ?>
原文地址:https://www.cnblogs.com/fangdada/p/14874983.html