设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP设计模式之 原型模式学习笔记

发布时间:2022-02-23 15:20 所属栏目:121 来源:互联网
导读:原型模式和其它的模式相对有一些不同之处了,这个也是当然了所有的设计模式中的各种模式都有自己的特色了,下面一起来看看。 原型模式其实和工厂模式比较类似,都是用来创建对象的,只不过与工厂模式的实现不同。原型模式是先创建好一个原型对象,然后通过cl
  原型模式和其它的模式相对有一些不同之处了,这个也是当然了所有的设计模式中的各种模式都有自己的特色了,下面一起来看看。
 
  原型模式其实和工厂模式比较类似,都是用来创建对象的,只不过与工厂模式的实现不同。原型模式是先创建好一个原型对象,然后通过clone原型对象来创建新的对象。这样就免去了类创建时重复的初始化操作了。原型模式适用于大对象的创建,因为在创建一个大对象时,需要很大的开销。如果每次都去new就会消耗很大,原型模式仅需从内存拷贝既可。
 
  还是继续通过实例来向大家演示一下:
 
  <?php
  /**
   * 抽象原型角色
   */
  interface Prototype {
      public function clone_obj();
  }
  /**
   * 具体原型角色
   */
  class Concrete implements Prototype{
    
      private $data;
    
      public function __construct($data) {
          $this->data = $data;
      }
      public function get_data() {
          return $this->data;
      }
    
      public function clone_obj() {
          /*
           * 深拷贝实现
           */
          /*$serialize_obj = serialize($this); // 序列化
          $clone_obj = unserialize($serialize_obj); // 反序列化
          return $clone_obj;*/
    
          return clone $this; // 浅拷贝
      }
  }
  /**
   * 测试深拷贝用的引用类
   */
  class Demo {
      public $arr;
  }
  $demo = new Demo();
  $demo->arr = array(1, 2);
  $concrete = new Concrete($demo);
  $object1 = $concrete->clone_obj();
  var_dump($concrete->get_data());
  echo '<br />';
  var_dump($object1->get_data());
  echo '<br />';  //Cuoxin.com
  //测试深拷贝
  $demo->arr = array(3, 4);
  var_dump($concrete->get_data());
  echo '<br />';
  var_dump($object1->get_data());
  echo '<br />';
  ?>
 

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读