原型模式
- 与工厂模式类似
- 与工厂模式实现不同,原型模式时先创建好一个原型对象,然后通过clone原型对象来创建新对象,免去了类创建时的初始化操作
- 原型模式适用于大对象创建,创建大对象开销大,每次new就会消耗很大,原型模式仅需内存拷贝
class Canvas {
private $data;
public function init($hei,$wid){
for($i=0;$i<$hei;$i++){
for($i=0;$i<$wid;$i++){
$data[$i][$j] = "*";
}
}
$this->data = $data;
}
public function rect($a1,$a2,$b1,$b2) {
foreach($this->data as $k1->$line){
if($k1<$a1 or $k1 > $a2) continue;
foreach($line as $k2 => $item){
if($k2<$b2 or $k2> $b2) contine;
$this->data[$k1][$2] = ' ';
}
}
}
public function draw(){
foreach ($this->data as
$line){
foreach ($lien as $item) {
echo $item;
}
echo PHP_EOL:
}
}
}
$canvas = new Canvas1();
$canvas->init(3,6,4,12);
$canvas->draw();
// 传统 ,再new一个对象,画其他长方形
// 原型模式
$prototype = new Canvas();
$prototype->init();
$canvas2= clone $prototype; // 克隆一个, 剩余的都走clone就可以了,不需要再new了
$canvas2->rect(1,3,2,6);
$canvas2->draw();
网友评论