国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

設計模式(12)迭代器模式(講解+應用)

golden_hamster / 414人閱讀

摘要:目錄迭代器模式為什么要用迭代器模式迭代器模式應用實例迭代器模式不知不覺更了篇,從今天開始近乎每天全滿的課程開始了,更新速度也要受到影響。

目錄

迭代器模式

為什么要用迭代器模式

迭代器模式應用實例

迭代器模式

不知不覺更了12篇,從今天開始近乎每天全滿的課程開始了,更新速度也要受到影響。

迭代器,最早聽到這個概念的時候是在大一的時候還對java一知半解就去搞Android的時候,接觸到的,在用到對于數據庫的操作的時候,我們來獲得數據的時候通過 rawQuery執行sql語句來獲得數據集返回的就是一個游標實例,Cursor,因此迭代器模式也被稱作是游標模式,具體例子和其使用在后面實例部分介紹。

迭代器:提供一種方法來遍歷集合的同時,又不暴露該集合的底層數據存儲的實現。

為什么要使用迭代器模式

我們常見的集合有很多種類,其頂層數據存儲和組織方式的不同導致了我們在對數據進行遍歷的時候存在一些差異,迭代器模式就是通過實現某種統一的方式來實現對不同的集合的遍歷,同時又不暴露出其底層的數據存儲和組織方式。

繼續我們造機器的問題,在講適配器的時候提到了,我們擁有不止一個商店,而且每個商店里所出售的貨物的種類也是不同的,懼于馬云大大的“不做電子商務將無商可務”,決定不僅僅是通過線下的這種銷售,在網上也進行出售,網上的店將作為一個集合,集合線下店里所有的產品,當有客戶下單,就有具有該上商品的網店進行發貨,那么第一個要解決的問題就是我要知道這些商店里都有什么產品,所以需要他們給提供一個貨物的種類單,由于不同的商店,其對商品種類管理使用的數據結構也是不相同的,有的是通過一個數組來存放,因為他們的店里永遠只會賣固定種類的貨物,然后有一些店里在不停的擴展規模,因此會通過一個可擴展的ArrayList來存放。(當然,現實中不會如此,為了舉例方便)然后,現在各個商家給我數據了,而且不止這兩種,這個時候頭大了。

開始,這樣來實現

public class Store{

//用來持有所有菜單條目
    public ArrayListlist = new ArrayList();

    public Store(){

    }
//針對不同的商店創建不同的類型
    public void getFirstStoreMachines(FirstStoreMenu menu){
        MenuItem [] firstStoreMenu = menu.getMenuItems();
        for(int i=0; i secondStoreMenu = menu.getMenuItems();
        for(int i=0; i

針對每一個商店的數據集進行遍歷,來獲得菜單條目,如果有一百個商店,那么我們的代碼量將變得很大,同時后期的維護也變得很困難了。

這個時候,又到了設計模式大顯身手的時候了。通過迭代器模式來給數組和容器包上一層,使得其內部結構對外完全不可見,從而使得我們無需針對每種數據結構多帶帶進行遍歷操作。代碼實例如下。
根據設計模式的基本原則針對接口編程,而不要針對具體類型,so

public interface Iterator{
    boolean hasNext();
    Object next();
}

看到這兩個方法,獲取sqlite數據庫中的數據的既視感。
然后之前我們的商店菜單類是這樣實現的

public class FirstStoreMenu extends Menu{
    MenuItem[] items;

    public MenuItem[] getFirstStoreMachines{
        return items;
    }
}

現在我們要使用迭代器了,所有要返回一個迭代器了,返回什么樣的迭代器,這個迭代器具體要怎么實現呢?

public class FirstMenuIterator implements Iterator{
    MenuItem[] items;
    int position=0;

    public FirstMenuIterator(MenuItem[] items){
        this.items = items;
    }
//向下移動
    public Object next(){
        MenuItem menuItem  = items[position];
        position++;
        return menuItem;
    } 
//判斷
    public boolean hasNext(){
        if(position>=items.length||items[position]==null){
            return false;
        }else{
            return true;
        }
    }
}
//通過判斷和移動的結合實現我們需要的遍歷操作

有了針對我們商店菜單的迭代器了,那么接下來可以這樣寫了

public class FirstStoreMenu extends Menu{
    MenuItem[]items;

    public Iterator createIterator(){
        return new FirstMenuIterator(items);
    }
}

我們總店中要如何應用這個迭代器呢?

public class Store{

//用來持有所有菜單條目
    public ArrayListlist = new ArrayList();

    public Store(){

    }

    public void addItem(Iterator iterator){
        while(iterator.hasNext())
            list.add(iterator.next());
    }

//用來展示所有的商品種類
    public void display(){
        for(int i=0; i

通過這種方式,我們不僅使得代碼變得簡潔(Store內的代碼),同時也使得我們的編程針對接口再進行編程。使得store類對各商店菜單類的耦合變低。這樣我們通過addItem方法向Store實例注入依賴實例即可完成對于各個商店的商品的匯總。

應用實例

上面提到了Android的數據庫sqlite獲得數據的時候,當然對于數據集的操作迭代器是很常用的。
Android中叫它游標,這個稱呼更好的反應出了特性,在數據集之上游走。具體代碼此處不再貼出。

邊城大神,在文章中提到了一個橋接模式,對于這個模式,橋接模式其思想為,將對象和行為多帶帶封裝成類,對象的特征和行為松耦合,然后對象自身并不去實現行為,通過對委托的形式調用行為類,結構上比較像是策略模式的結構。

下篇更新生成器模式,結合Android中的AlertDialog.Builder來談下

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64655.html

相關文章

  • 從觀察者模式迭代模式系統講解 RxJS Observable(一)

    摘要:是的縮寫,起源于,是一個基于可觀測數據流結合觀察者模式和迭代器模式的一種異步編程的應用庫。是基于觀察者模式和迭代器模式以函數式編程思維來實現的。學習之前我們需要先了解觀察者模式和迭代器模式,還要對流的概念有所認識。 RxJS 是 Reactive Extensions for JavaScript 的縮寫,起源于 Reactive Extensions,是一個基于可觀測數據流 Stre...

    notebin 評論0 收藏0
  • PHP基礎

    摘要:分別為適配器模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。設計模式五適配器模式適配器模式將某個對象的接生成器和協程的實現在這篇文章中,作者針對那些比較難以理解的概念,以一個更為通俗的方式去講明白。。 PHP 源碼注解 PHP 的詳細源碼注解 PHP 字符串操作整理 一些有關字符串的常用操作。 Redis 常見七種使用場景 (PHP 實戰) 這篇文章主要介紹利用 R...

    HtmlCssJs 評論0 收藏0
  • 《JavaScript 模式》知識點小抄本(上)

    摘要:單體模式有以下優點用來劃分命名空間,減少全局變量數量。通常我們使用操作符創建單體模式的三種選擇,讓構造函數總返回最初的對象使用全局對象來存儲該實例不推薦,容易全局污染。實現該工廠模式并不困難,主要是要找到能夠穿件所需類型對象的構造函數。 介紹 最近開始給自己每周訂個學習任務,學習結果反饋為一篇文章的輸出,做好學習記錄。 這一周(02.25-03.03)我定的目標是《JavaScri...

    didikee 評論0 收藏0
  • 進階Java架構師必看的15本書

    摘要:阿里巴巴的共享服務理念以及企業級互聯網架構建設的思路,給這些企業帶來了不少新的思路,這也是我最終決定寫這本書的最主要原因。盡在雙阿里巴巴技術演進與超越是迄今唯一由阿里巴巴集團官方出品全面闡述雙八年以來在技術和商業上演進和創新歷程的書籍。 showImg(https://segmentfault.com/img/remote/1460000015386860); 1、大型網站技術架構:核...

    Julylovin 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<