zoukankan      html  css  js  c++  java
  • 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();
    
     ?>
  • 相关阅读:
    numpy用法介绍-未完待续
    GeoJSON相关操作
    awk日志分析
    awk获取外部变量
    Shell编程二
    Shell编程
    Linux监控平台搭建
    Linux集群架构
    Linux集群
    MySQL主从(MySQL proxy Lua读写分离设置,一主多从同步配置,分库分表方案)
  • 原文地址:https://www.cnblogs.com/fangdada/p/14874983.html
Copyright © 2011-2022 走看看