<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                >[info]迭代器模式 (Iterator),又叫做游標(Cursor)模式。提供一個對象來順序訪問聚合對象中的一系列數據,而不暴露聚合對象的內部表示。就像一個雙色球彩票開獎一 樣,每次都是搖出七個球,不能能搖不是七個球的中獎號碼組合。概括為提供一種方法訪問一個容器(Container)對象中各個元素,而又不需暴露該對象的內部細節。 **優點:** 1. 訪問一個聚合對象的內容而無須暴露它的內部表示。 2. 遍歷任務交由迭代器完成,這簡化了聚合類。 3. 它支持以不同方式遍歷一個聚合,甚至可以自定義迭代器的子類以支持新的遍歷。 4. 增加新的聚合類和迭代器類都很方便,無須修改原有代碼。 5. 封裝性良好,為遍歷不同的聚合結構提供一個統一的接口。 **缺點:** * 每次遍歷都是整個集合,不能單獨取出元素。增加了類的個數,這在一定程度上增加了系統的復雜性。 **應用場景:** 需要操作集合里的全部元素 當你需要訪問一個聚合對象,而且不管這些對象是什么都需要遍歷的時候,就應該考慮使用迭代器模式。另外,當需要對聚集有多種方式遍歷時,可以考慮去使用迭代器模式。迭代器模式為遍歷不同的聚集結構提供如開始、下一個、是否結束、當前哪一項等統一的接口 **實際應用:** 如[Java](http://c.biancheng.net/java/)語言中的 Collection、List、Set、Map 等都包含了迭代器 ## **模式的結構** 1. 抽象聚合(Aggregate)角色:定義存儲、添加、刪除聚合對象以及創建迭代器對象的接口。 2. 具體聚合(ConcreteAggregate)角色:實現抽象聚合類,返回一個具體迭代器的實例。 3. 抽象迭代器(Iterator)角色:定義訪問和遍歷聚合元素的接口,通常包含 hasNext()、first()、next() 等方法。 4. 具體迭代器(Concretelterator)角色:實現抽象迭代器接口中所定義的方法,完成對聚合對象的遍歷,記錄遍歷的當前位置。 ![](https://img.kancloud.cn/fb/52/fb52c04e872fce60d6979f9da28a75eb_521x376.png) ``` //抽象聚合 interface Aggregate { public function add($obj); public function remove(); /** * * @return Iterator [description] */ public function getIterator(); } //具體聚合 class ConcreteAggregate implements Aggregate { private $list=array(); public function add($obj) { //尾部插入一個或多個新單元(入棧) array_push($this->list, $obj); } public function remove() { array_pop($this->list); } /** * * @return Iterator [description] */ public function getIterator() { return(new ConcreteIterator($this->list)); } } //抽象迭代器(多個I因為php系統已有Iterator類) interface IIterator { function first(); function next(); function hasNext(); } //具體迭代器 class ConcreteIterator implements IIterator { private $list=array(); private $index=-1; public function __construct(array $list) { $this->list=$list; } /** * * @return boolean [description] */ public function hasNext() { if($this->index < count($this->list)-1) { return true; }else{ return false; } } public function first() { $this->index=0; $obj=$this->list[$this->index]; return $obj; } public function next() { $obj=null; if($this->hasNext()) { $obj=$this->list[++$this->index]; //$this->index += 1 //$obj=$this->list[$this->index] } return $obj; } } class Client { public static function main() { $Aggregate=new ConcreteAggregate(); $Aggregate->add("中山大學"); $Aggregate->add("華南理工"); $Aggregate->add("韶關學院"); print_r("聚合的內容有:<br>"); //獲取迭代器 $Iterator=$Aggregate->getIterator(); //遍歷迭代器 while($Iterator->hasNext()) { $ob=$Iterator->next(); print_r("--".$ob."--<br>"); } $ob=$Iterator->first(); print_r("First:".$ob); } } Client::main(); 輸出: 聚合的內容有: --中山大學-- --華南理工-- --韶關學院-- First:中山大學 ``` php標準庫(SPL)中提供了迭代器接口 Iterator,要實現迭代器模式,實現該接口即可。 ~~~ class sample implements Iterator { private $_items ; public function __construct(&$data) { $this->_items = $data; } public function current() { return current($this->_items); } public function next() { next($this->_items); } public function key() { return key($this->_items); } public function rewind() { reset($this->_items); } public function valid() { return ($this->current() !== FALSE); } } // client $data = array(1, 2, 3, 4, 5); $sa = new sample($data); foreach ($sa AS $key => $row) { echo $key, ' ', $row, '<br />'; } /* 輸出: 0 1 1 2 2 3 3 4 4 5 */ ~~~ Yii FrameWork Demo ``` class CMapIterator implements Iterator { /** * @var array the data to be iterated through */ private $_d; /** * @var array list of keys in the map */ private $_keys; /** * @var mixed current key */ private $_key; /** * Constructor. * @param array the data to be iterated through */ public function __construct(&$data) { $this->_d=&$data; $this->_keys=array_keys($data); } /** * Rewinds internal array pointer. * This method is required by the interface Iterator. */ public function rewind() { $this->_key=reset($this->_keys); } /** * Returns the key of the current array element. * This method is required by the interface Iterator. * @return mixed the key of the current array element */ public function key() { return $this->_key; } /** * Returns the current array element. * This method is required by the interface Iterator. * @return mixed the current array element */ public function current() { return $this->_d[$this->_key]; } /** * Moves the internal pointer to the next array element. * This method is required by the interface Iterator. */ public function next() { $this->_key=next($this->_keys); } /** * Returns whether there is an element at current position. * This method is required by the interface Iterator. * @return boolean */ public function valid() { return $this->_key!==false; } } $data = array('s1' => 11, 's2' => 22, 's3' => 33); $it = new CMapIterator($data); foreach ($it as $row) { echo $row, '<br />'; } /* 輸出: 11 22 33 */ ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看