php 八大设计模式-原型模式
原型模式的作用:对象克隆以避免创建对象时的消耗
特点:
- 与工厂模式类似,都是用来创建对象。
- 与工厂模式的实现不同,原型模式是先创建好一个原型对象,然后通过clone原型对象来创建新的对象。这样就免去了类创建时重复的初始化操作。
- 原型模式适用于大对象的创建,创建一个大对象需要很大的开销,如果每次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();
?>