日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

PHP設計模式之迭代器模式Iterator實例分析【對象行為型】

瀏覽:274日期:2022-09-10 16:30:44

本文實例講述了PHP設計模式之迭代器模式Iterator。分享給大家供大家參考,具體如下:

1.概述

類中的面向對象編程封裝應用邏輯。類,就是實例化的對象,每個單獨的對象都有一個特定的身份和狀態。單獨的對象是一種組織代碼的有用方法,但通常你會處理一組對象或者集合。

集合不一定是均一的。圖形用戶界面框架中的 Window 對象可以收集任意數量的控制對象 - Menu、Slider 和 Button。并且,集合的實現可以有多種方式:PHP 數字是一個集合,但也是一個散列表,一個鏈接列表,一個堆棧以及隊列。

例子1:電視遙控器的頻道遍歷

PHP設計模式之迭代器模式Iterator實例分析【對象行為型】

2.問題

如何操縱任意的對象集合?

如一個列表(List)或者一個集合(Set),我們又如何提供一種方法來讓別人可以訪問它的元素,而又不需要暴露它的內部結構?

3.解決方案

迭代器模式:使用迭代器模式來提供對聚合對象的統一存取,即提供一個外部的迭代器來對聚合對象進行訪問和遍歷 , 而又不需暴露該對象的內部結構。又叫做游標(Cursor)模式 。

你可能沒有意識到這一點,但你每天都在使用迭代器模式 。

如在PHP開發中,它潛藏在 PHP 的數組類型和各種數組操作函數中。(其實,給你一些固有類的數組的組合和一群用這些固有類工作的可變函數,你將不得不使用這些數組來處理對象集合。這是在 PHP 中的本地數組迭代:

$test = array(‘one’, ‘two’, ‘three’);$output = ‘’; reset($test); do {$output .= current($test);} while (next($test));echo $output; // produces ‘onetwothree’

reset() 函數將迭代重新轉到數組的開始;current() 返回當前元素的值;next() 則前進至數組中的下一個元素并返回新的 current() 值。當你超出數組的最后一個元素時,next() 返回 false。使用這些迭代方法,PHP 數組的內部實現就與你不相關了。

迭代器結合了封裝和多態的面向對象程序設計原理。使用迭代器,你可以對集合中的對象進行操作,而無需專門了解集合如何顯現或者集合包含什么(對象的種類)。迭代器提供了不同固定迭代實現的統一接口,它完全包含了如何操縱特定集合的詳細信息,包括顯示哪些項(過濾)及其顯示順序(排序)。

4.適用性

迭代器模式可用來:

• 訪問一個聚合對象的內容而無需暴露它的內部表示。• 需要為聚合對象提供多種遍歷方式。• 為遍歷不同的聚合結構提供一個統一的接口 (即, 支持多態迭代)

5.結構

PHP設計模式之迭代器模式Iterator實例分析【對象行為型】

結構上可以看出,迭代器模式在客戶與容器之間加入了迭代器角色。迭代器角色的加入,就可以很好的避免容器內部細節的暴露,而且也使得設計符號“單一職責原則”。

注意,在迭代器模式中,具體迭代器角色和具體容器角色是耦合在一起的——遍歷算法是與容器的內部細節緊密相關的。為了使客戶程序從與具體迭代器角色耦合的困境中脫離出來,避免具體迭代器角色的更換給客戶程序帶來的修改,迭代器模式抽象了具體迭代器角色,使得客戶程序更具一般性和重用性。這被稱為多態迭代。

6.模式的組成

抽象迭代器(Iterator): 迭代器定義訪問和遍歷元素的接口。具體迭代器(ConcreteIterator): 具體迭代器實現迭代器Iterator接口。對該聚合遍歷時跟蹤當前位置。抽象聚合類(Aggregate): 聚合定義創建相應迭代器對象的接口。具體聚合類(ConcreteAggregate): 體聚合實現創建相應迭代器的接口,該操作返回ConcreteIterator的一個適當的實例。

7.效果

•迭代器模式的作用:

1 ) 它支持以不同的方式遍歷一個聚合對象 : 復雜的聚合可用多種方式進行遍歷。迭代器模式使得改變遍歷算法變得很容易 : 僅需用一個不同的迭代器的實例代替原先的實例即可。你也可以自己定義迭代器的子類以支持新的遍歷。2) 迭代器簡化了聚合的接口 有了迭代器的遍歷接口,聚合本身就不再需要類似的遍歷接口了。這樣就簡化了聚合的接口。3) 在同一個聚合上可以有多個遍歷 每個迭代器保持它自己的遍歷狀態。因此你可以同時進行多個遍歷。4)在迭代器模式中,增加新的聚合類和迭代器類都很方便,無須修改原有代碼,滿足“開閉原則”的要求。

迭代器模式的缺點

由于迭代器模式將存儲數據和遍歷數據的職責分離,增加新的聚合類需要對應增加新的迭代器類,類的個數成對增加,這在一定程度上增加了系統的復雜性。

8.實現

我們直接實現spl的iterator:

<?php /** * 具體迭代器(ConcreteIterator): 具體迭代器實現迭代器Iterator接口。對該聚合遍歷時跟蹤當前位置。 */class ConcreteIterator implements Iterator { protected $_key; protected $_collection; public function __construct($collection){ $this->_collection = $collection; $this->_key = 0; } public function rewind(){ $this->_key = 0; } public function valid(){ return isset($this->_collection[$this->_key]); } public function key(){ return $this->_key; } public function current(){ return $this->_collection[$this->_key]; } public function next(){ return ++$this->_key; } } /** * 具體聚合類(ConcreteAggregate): */class ConcreteAggregate implements IteratorAggregate{ protected $_arr; public function __construct($array){ $this->_arr = $array; } public function getIterator(){ return new ConcreteIterator($this->_arr); }} $_collectionay = array(1,2,3,3,4);$it = new ConcreteIterator($_collectionay);foreach($it as $key=>$value){ echo $key.’:’.$value.’<br/>’;}

9.與其他相關模式

Composite :迭代器常被應用到象復合這樣的遞歸結構上。Factory Method:多態迭代器靠Factory Method來例化適當的迭代器子類。Memento:常與迭代器模式一起使用。迭代器可使用一個 Memento來捕獲一個迭代的狀態。迭代器在其內部存儲Memento。

10.總結與分析

1)聚合是一個管理和組織數據對象的數據結構。2)聚合對象主要擁有兩個職責:一是存儲內部數據;二是遍歷內部數據。3)存儲數據是聚合對象最基本的職責。4)將遍歷聚合對象中數據的行為提取出來,封裝到一個迭代器中,通過專門的迭代器來遍歷聚合對象的內部數據,這就是迭代器模式的本質。迭代器模式是“單一職責原則”的完美體現。

更多關于PHP相關內容感興趣的讀者可查看本站專題:《php面向對象程序設計入門教程》、《PHP數組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家PHP程序設計有所幫助。

標簽: PHP
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品国产乱码久久久久久1区2匹| 亚洲va在线| 在线视频观看日韩| 亚洲三级欧美| 亚洲精品在线影院| 老司机精品在线| 欧美成人精品午夜一区二区| 国产精品一区二区三区www | 91综合网人人| 久久国产欧美日韩精品| 首页国产欧美日韩丝袜| 99精品国产一区二区三区| 欧美日韩一视频区二区| 电影天堂国产精品| 青草国产精品| 里番精品3d一二三区| 日本综合视频| 国产亚洲一区二区三区啪| 亚洲免费精品| 伊人精品视频| 国产成人77亚洲精品www| 日韩成人高清| 亚洲精品一区二区在线看| 日韩在线成人| 日韩啪啪电影网| 日本va欧美va精品| 天堂久久av| xxxxx性欧美特大| 精品无人区麻豆乱码久久久| 国产精品最新| 麻豆久久久久久| 卡一卡二国产精品| 久久久久久美女精品| 美女在线视频一区| 国产极品一区| 精品视频国内| 激情黄产视频在线免费观看| 国产成人精品亚洲线观看| 精品久久网站| 精品欧美激情在线观看| 丝袜国产日韩另类美女| 亚洲一区二区三区久久久| 亚洲婷婷丁香| 日韩av不卡一区二区| 欧美 日韩 国产精品免费观看| 欧美交a欧美精品喷水| 久久久人人人| 美女网站视频一区| 国产麻豆精品久久| 日韩美女精品| 日韩精品欧美| 少妇精品在线| 韩国精品主播一区二区在线观看| 日本不卡一二三区黄网| 天堂俺去俺来也www久久婷婷| 最近高清中文在线字幕在线观看1| 亚洲欧美日本国产| 视频一区视频二区中文| 中文字幕在线官网| 九九99久久精品在免费线bt| 蜜桃免费网站一区二区三区 | 欧美日韩a区| 蜜桃视频一区二区三区在线观看| 日韩高清欧美激情| 精品一区电影| 欧美日韩精品免费观看视欧美高清免费大片 | 99久久亚洲精品蜜臀| 亚洲女同中文字幕| 婷婷综合社区| 欧美国产免费| 国产精品99一区二区三区| 国产精品99免费看| 日本一区免费网站| 欧美xxxx性| 国产一区二区三区成人欧美日韩在线观看| 福利一区二区免费视频| 亚洲第一区色| 欧美sss在线视频| 久久国产三级| 日韩在线第七页| 日韩精品免费一区二区夜夜嗨 | 99久久婷婷| 你懂的国产精品永久在线| 视频一区二区中文字幕| 亚洲一级影院| 成人精品动漫一区二区三区| 日韩精品久久久久久| 色婷婷久久久| 国产成人精品三级高清久久91| 日本亚洲三级在线| 中文在线日韩| 今天的高清视频免费播放成人| 亚洲一区久久| 国产精品91一区二区三区| 欧产日产国产精品视频| av日韩中文| 国产精品成人a在线观看| 久久国内精品自在自线400部| 亚洲人成亚洲精品| 一区二区电影| 亚洲欧美日韩精品一区二区| 欧美sss在线视频| 欧美日韩精品一区二区三区在线观看| 午夜久久免费观看| 蜜臀国产一区| 国产亚洲一区二区手机在线观看| 精品一区二区三区四区五区| 麻豆一区二区99久久久久| 国产精品久久久一区二区| 欧美精品福利| 久久99国产精品视频| 国产亚洲一区二区手机在线观看| 激情黄产视频在线免费观看| 欧美日韩免费观看视频| 蜜桃av.网站在线观看| 亚洲精品97| 中文字幕亚洲影视| 免费精品视频| 中文不卡在线| 国产精选久久| 国产在线观看www| 亚洲一区二区三区高清| 亚洲v天堂v手机在线| 国产精东传媒成人av电影| 国产在线|日韩| 亚洲欧美日韩一区在线观看| 免费一区二区视频| 国产精品视频一区二区三区综合| 精品免费av| 香蕉久久久久久久av网站| 欧美激情视频一区二区三区在线播放| 精品国模一区二区三区| 国产精品毛片久久| 久久成人一区| 日韩福利一区| 亚洲精品护士| 91精品国产福利在线观看麻豆| 丝袜国产日韩另类美女| 丁香婷婷久久| 日韩福利在线观看| 99久久久久| 国产资源在线观看入口av| 日韩中文欧美在线| 欧美日韩精品免费观看视完整| 中文字幕乱码亚洲无线精品一区| 精品一区二区三区的国产在线观看 | 蜜臀a∨国产成人精品| 给我免费播放日韩视频| 首页亚洲欧美制服丝腿| 成人福利视频| 激情综合婷婷| 国产精品777777在线播放 | 91精品国产一区二区在线观看 | 国产精品7m凸凹视频分类| 91欧美国产| 97国产成人高清在线观看| 不卡专区在线| 日韩成人高清| 亚洲一级特黄| 鲁大师影院一区二区三区| 日韩一级不卡| 日本不卡中文字幕| 国产精品麻豆成人av电影艾秋 | 免费国产自线拍一欧美视频| 婷婷综合五月| 好吊日精品视频| 日韩久久一区二区三区| 日韩久久电影| 日韩成人在线看| 亚洲精品美女| 亚洲精品第一| 日韩综合精品| 亚洲理论在线| av高清不卡| 日韩成人一级| 美女少妇全过程你懂的久久| 国产色噜噜噜91在线精品| 亚洲国产专区| 日韩欧美中文字幕一区二区三区| 国产欧美日韩在线一区二区| 国产一区二区三区不卡视频网站| 蜜桃av一区二区三区电影| 日韩中文在线电影| 91亚洲成人| 麻豆国产精品777777在线| 国产农村妇女精品一二区| 欧美精品不卡| 国产精品啊v在线| 蜜臀国产一区| 在线亚洲激情| 国产精品一区二区免费福利视频| 国产一区二区三区91| 亚洲在线一区| 麻豆中文一区二区| 日韩在线观看| 亚洲精品少妇| 精品三级久久| 国产一区二区三区四区二区| 欧美午夜不卡影院在线观看完整版免费| 亚洲最新av|