亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

【九月打卡】第11天 設計模式之迭代器模式

標簽:
PHP 設計模式

课程名称:大话PHP设计模式

课程章节:迭代器模式

课程讲师:Rango

课程内容:

为什么要使用迭代器模式?

  • 迭代器模式是针对于集合对象而生的,既然是集合对象,就设计到遍历,但在一个对象内部要给其添加遍历的操作就让这个对象承担了太多的责任了,而面向对象设计原则之一就是单一职责原则。所以要把遍历的职责交给迭代器,集合对象实现迭代器的接口就好了

我对于为什么要使用迭代器模式的理解

  • 看了教程还是不理解迭代器模式在具体项目中的应用场景,在必应上搜索,看到这篇文章后,我认为迭代器模式不是位了解决项目中的实际为题,而是为了实现面向对象设计原则中的单一职责原则,是为了解决其它设计思想中的问题而提供的一种解决方案。

代码

该实例中的Imooc\Loader.php文件为框架加载文件,不是策略模式中的文件

  • 代码目录结构
    代码目录结构

  • Imooc/AllData.php

<?php

namespace Imooc;

// Iterator是PHP中迭代器实现的接口,它有5个抽象方法
class AllData implements \Iterator
{
  private $detail = [];
  // 使用index变量记录下标
  private $index;

  public function __construct()
  {
	// 这个模拟的就是要被迭代器遍历的集合
    $this->detail = [
      '小明', '小红', '丹尼', '珍妮', '佩奇', '喜洋洋'
    ];
  }

  // 返回当前迭代的元素
  public function current()
  {
    return $this->detail[$this->index];
  }

  // 让下标加一
  public function next()
  {
    $this->index++;
  }

  // 返回当前的下标
  public function key()
  {
    return $this->index;
  }

  // 返回是否还有下一个元素
  public function valid()
  {
    return $this->index < count($this->detail);
  }

  // 重置下标
  public function rewind()
  {
    $this->index = 0;
  }
}
  • Imooc/Loader.php
<?php

namespace Imooc;

class Loader
{
  static public function autoload($class) {
    require BASEDIR . '/' . str_replace('\\', '/', $class) . '.php';
  }
}
  • index.php
<?php
define('BASEDIR', __DIR__);
include BASEDIR . '/Imooc/Loader.php';

spl_autoload_register('\\Imooc\\Loader::autoload');

// 这里就可以把实例化后的AllData类当做一个集合对象来遍历了,使用foreach来遍历
$data = new \Imooc\AllData;
foreach ($data as $k=>$v) {
  var_dump($v);
}

/** 输出:
  string(6) "小明"
  string(6) "小红"
  string(6) "丹尼"
  string(6) "珍妮"
  string(6) "佩奇"
  string(9) "喜洋洋"
 */

课程收获

开始一直不太明白这个模式的真正作用,就反复看还是不明白,就去看别的,找别的资料。所以,看不懂的就先算了,看看别的或者明天再看。。。

图片描述

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消