1. 程式人生 > >PHP設計模式——迭代器模式

PHP設計模式——迭代器模式

宣告:本系列部落格參考資料《大話設計模式》,作者程傑。

       迭代器模式:迭代器模式是遍歷集合的成熟模式,迭代器模式的關鍵是將遍歷集合的任務交給一個叫做迭代器的物件,它的工作時遍歷並選擇序列中的物件,而客戶端程式設計師不必知道或關心該集合序列底層的結構。

       UML類圖:

       

         角色:      

        Iterator(迭代器):迭代器定義訪問和遍歷元素的介面

        ConcreteIterator(具體迭代器):具體迭代器實現迭代器介面,對該聚合遍歷時跟蹤當前位置

        Aggregate (聚合):聚合

定義建立相應迭代器物件的介面(可選)

        ConcreteAggregate(具體聚合):具體聚合實現建立相應迭代器的介面,該操作返回ConcreteIterator的一個適當的例項(可選)

         核心程式碼:

<?php
/**
 * Created by PhpStorm.
 * User: Jiang
 * Date: 2015/6/8
 * Time: 21:31
 */

//抽象迭代器
abstract class IIterator
{
    public abstract function First();
    public abstract function Next();
    public abstract function IsDone();
    public abstract function CurrentItem();
}

//具體迭代器
class ConcreteIterator extends IIterator
{
    private $aggre;
    private $current = 0;
    public function __construct(array $_aggre)
    {
        $this->aggre = $_aggre;
    }
    //返回第一個
    public function First()
    {
        return $this->aggre[0];
    }

    //返回下一個
    public function  Next()
    {
        $this->current++;
        if($this->current<count($this->aggre))
        {
            return $this->aggre[$this->current];
        }
        return false;
    }

    //返回是否IsDone
    public function IsDone()
    {
        return $this->current>=count($this->aggre)?true:false;
    }

    //返回當前聚集物件
    public function CurrentItem()
    {
        return $this->aggre[$this->current];
    }
}

          呼叫客戶端測試程式碼:
header("Content-Type:text/html;charset=utf-8");
//--------------------------迭代器模式-------------------
require_once "./Iterator/Iterator.php";
$iterator= new ConcreteIterator(array('周杰倫','王菲','周潤發'));
$item = $iterator->First();
echo $item."<br/>";
while(!$iterator->IsDone())
{
    echo "{$iterator->CurrentItem()}:請買票!<br/>";
    $iterator->Next();
}

         使用場景:   

         1.訪問一個聚合物件的內容而無需暴露它的內部表示

         2.支援對聚合物件的多種遍歷

         3.為遍歷不同的聚合結構提供一個統一的介面

       歡迎關注我的視訊課程,地址如下,謝謝。




相關推薦

PHP設計模式——模式

宣告:本系列部落格參考資料《大話設計模式》,作者程傑。        迭代器模式:迭代器模式是遍歷集合的成熟模式,迭代器模式的關鍵是將遍歷集合的任務交給一個叫做迭代器的物件,它的工作時遍歷並選擇序列

重走Java設計模式——模式(Iterator Pattern)

迭代器模式 定義 提供一種方法順序訪問一個聚合物件中各個元素, 而又無須暴露該物件的內部表示。 模式結構 1.抽象容器:一般是一個介面,提供一個iterator()方法,例如java中的Collection介面,List介面,Set介面等。 2.具體

設計模式 | 模式及典型應用

本文的主要內容: 介紹迭代器模式 原始碼分析迭代器模式的典型應用 Java集合中的迭代器模式 Mybatis中的迭代器模式 更多內容可訪問我的個人部落格:laijianfeng.org 關注【小旋鋒】微信公眾號,及時接收博文推送

設計模式 --- 模式

1.定義 提供一種方法順序訪問一個容器物件中的各個元素,而又不需要暴露該物件的內部表示。   2.使用場景 遍歷一個容器物件   3.簡單實現 大部分容器類都有提供迭代方法 不需要我們自己實現,這裡實現一個通用程式碼。 //迭代器介面 interf

設計模式-模式(Iterator)

概述 定義 : 提供一種方法, 順序訪問一個集合物件中的各個元素, 而又不暴露該物件的內部表示 型別 : 行為型 適用場景 訪問一個集合物件的內容而無需暴露它的內部表示 為遍歷不同的集合結構提供一個統一的介面 優點 分離了集合物件的遍歷

Java設計模式——模式

迭代器模式的定義是:   提供一種方法順序訪問一個聚合物件中的各個元素,而又不暴露其內部表示 問題:   這裡引用《Head First》中的一個示例,如果一個聚合物件(選單)中存在兩種不同的儲存結構(ArrayList & Array),該如何操作?   如果是簡單的逐個遍歷,程式

java設計模式——模式(Iterator Pattern)

概述:          在軟體開發中,我們經常需要使用聚合物件來儲存一系列資料。聚合物件擁有兩個職責:一是儲存資料;二是遍歷資料。從依賴性來看,前者是聚合物件的基本職責;而後者既是可變化的,又是可分離的。因此,可以將遍歷資料

移動開發之設計模式-模式(IOS&Android)

資源 完全參照 迭代器模式|菜鳥教程 ,但不包括IOS程式碼 迭代器模式 迭代器模式(Iterator Pattern)是 Java 和 .Net 程式設計環境中非常常用的設計模式。這種模式用於順序訪問集合物件的元素,不需要知道集合物件的底層表示。 迭代器模式屬於行為型模式。

淺談Java設計模式——模式(Iterator)

一、概述         給定一個語言,定義它的文法的一種表示,並定義一個直譯器,這個直譯器使用該表示來解釋語言中的句子。 二、使用場景 1.訪問一個聚合物件的內容而無需暴露它的內部表示。  2.支援對聚合物件的多種遍歷。  3.為遍歷不同的聚合結構提供一個統一的介

java設計模式----模式

定義 在軟體構建過程中,集合物件內部結構常常變化各異,但對於這些集合物件,我們希望在不暴露其內部結構的同時,可以讓外部客戶程式碼透明地訪問其中包含的元素;同時這種“透明遍歷”也為同一種演算法在多種集合物件上進行操作提供了可能。 使用面向物件技術將這種遍歷機制抽象為“迭代器物件”為“應對

設計模式模式(IteratorPattern)

核心模組:迭代器角色(定義訪問和遍歷元素的介面),具體迭代器角色,容器角色,具體容器角色 所有程式碼請訪問:[email protected]:289804201/PatternLearn.git 使用場景:外部物件訪問內部聚合物件; 優點:將儲存資料和

JavaScript設計模式--模式

迭代器模式是指提供一種方法順序訪問一個聚合物件中的各個元素,而又不需要暴露該物件的內部表示。 JavaScript中的Array.prototype.forEach 一、jQuery中的迭代器

17-Python與設計模式--模式

一、迭代器與生成器 今天的主角是迭代器模式。在python中,迭代器並不用舉太多的例子,因為python中的迭代器應用實在太多了(不管是python還是其它很多的程式語言中,實際上迭代器都已經納入到了常用的庫或者包中)。而且在當前,也幾乎沒有人專門去開發一個迭代器,而是直接去使用list、string、se

設計模式--模式與組合方法模式

迭代器模式是將對物件的遍歷封裝成迭代器,對外部隱藏物件遍歷的具體實現。 而組合方法是實現對處於不同層次的同種物件提供一致性的遍歷方法。 首先我們開始討論迭代器模式。 我們在實踐過程中可以遇到這樣的情況,我們需要對用array,ArrayList,Stack  等模式包裝的

設計模式--模式

迭代器模式(Iterator Pattern) 迭代器模式(Iterator Pattern)是java和.Net程式設計環境中非常常用的設計模式。這種模式用於順序訪問集合物件的元素,不需要知道集合物件的底層實現。大類劃分為行為型模式。 介紹 意圖:提

設計模式-模式(Iterator Pattern)

模板方法:提供一種方法順序訪問一個聚合物件中的各個元素,而又不暴露其內部的表示。 迭代器模式把在元素之間遊走的責任交給迭代器,而不是聚合物件。這不僅讓聚合的介面和實現變得更簡潔,也可以讓聚合物件更專注在它所應該專注的事情上面(也就是管理物件集合),而不必去理會遍歷的事情。

JAVA 設計模式 模式

用途 迭代器模式 (Iterator) 提供一種方法順序訪問一個聚合物件中各個元素,而又不暴露該物件的內部表示。 迭代器模式是一種行為型模式。 結構 圖-迭代器模式結構圖 Iterat

設計模式-模式 C++實現

一個聚合物件,如一個列表(List)或者一個集合(Set),應該提供一種方法來讓別人可以訪問它的元素,而又不需要暴露它的內部結構。 針對不同的需要,可能還要以不同的方式遍歷整個聚合物件,但是我們並不希望在聚合物件的抽象層介面中充斥著各種不同遍歷的操作。 怎樣

淺析JavaScript設計模式——模式

迭代器模式 提供一種方法順序訪問一個聚合物件中的各個元素,而又不需要暴露該物件的內部表示 迭代器模式不像我們上次講的代理模式 它十分簡單,簡單到我們可能都不認為它是一種設計模式 因為我們現在使用的語言基本上內部都實現了自己的迭代器 迭代器可

行為型設計模式-模式

迭代器模式: 提供一種方法順序訪問一個聚合物件中的各個元素,而不需要暴露該物件的內部實現,可以實現保護目標物件的目的。 應用:JDK自帶的集合框架 迭代器模式參與角色: 迭代器角色