zoukankan      html  css  js  c++  java
  • PHP设计模式之原型模式

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

    Canvas.php //文件
    
    <?php
    
    class Canvas{
    
        private $data;
    
        function init($width = 20, $height = 10)
        {
            $data = array();
            for($i = 0; $i < $height; $i++)
            {
                for($j = 0; $j < $width; $j++)
                {
                    $data[$i][$j] = '*';
                }
            }
            $this->data = $data;
        }
    
        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] = '#';
                }
            }
        }
    
        function draw(){
            foreach ($this->data as $line){
                foreach ($line as $char){
                    echo $char;
                }
                echo "<br>;";
            }
        }
    }
    Index.php  // 入口文件
    
    <?php
    
    $c = new Canvas();
    $c->init();
    
    // $canvas1 = new Canvas();
    // $canvas1->init();
    
    //通过克隆 $c,可以省去 init() 方法
    $canvas1 = clone $c; 
    
    //去产生一个数组。当项目中需要产生很多的这样的对象时,就会new很多的对象,那样是非常消耗性能的。
    $canvas1->rect(2, 2, 8, 8);
    $canvas1->draw();
    
    echo "-----------------------------------------<br>";
    
    // $canvas2 = new Canvas();
    // $canvas2->init();
    
    $canvas2 = clone $c;
    $canvas2->rect(1, 4, 8, 8);
    $canvas2->draw();
  • 相关阅读:
    Spring MVC(1)Spring MVC的初始化和流程以及SSM的实现
    Spring(四)Spring与数据库编程
    MyBatis(4)-- 动态SQL
    MyBatis(3)-- Mapper映射器
    MyBatis(2)-- MyBatis配置mybatis-config.xml
    MyBatis(1)-- MyBatis介绍
    计算机网络(2)-- URL、HTTP、HTTPS、HTML
    计算机网络(1)- TCP
    Shell脚本编程
    和为定值的多个数
  • 原文地址:https://www.cnblogs.com/cutcop/p/13212623.html
Copyright © 2011-2022 走看看