最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS App設(shè)計模式開發(fā)中對迭代器模式的使用示例

 更新時間:2016年03月30日 17:08:54   作者:Snow Liang  
這篇文章主要介紹了iOS App設(shè)計模式開發(fā)中對迭代器模式的使用示例,示例代碼為傳統(tǒng)的Objective-C,需要的朋友可以參考下

何為迭代器模式?

    迭代器提供了一種順序訪問集合對象中元素的方法,而無需暴漏結(jié)構(gòu)的底層表示和細(xì)節(jié)。遍歷集合中元素的職能從集合本身轉(zhuǎn)移到迭代器對象。迭代器定義了一個用于訪問集合元素并記錄當(dāng)前元素的接口。不同的迭代器可以執(zhí)行不同的策略。

例子

說了這么多,下面給大家展示一下類關(guān)系圖。

2016330165811106.jpg (385×280)

上圖中Client的右邊是迭代器,左邊是具體迭代的類型,在迭代器內(nèi)部對具體需要迭代的類型進行了引用,還算不難理解吧,呵呵。其實,看起來是為了對具體類型進行解耦。好啦,下面給出具體的代碼實現(xiàn),簡單的模擬了迭代器模式。

注意:本文所有代碼均在ARC環(huán)境下編譯通過。

Iterator類接口

復(fù)制代碼 代碼如下:

#import <Foundation/Foundation.h>

@interface Iterator:NSObject
-(id)First;
-(id)Next;
-(BOOL)IsDone;
-(id)CurrentItem;
@end


Iterator類實現(xiàn)
復(fù)制代碼 代碼如下:

#import "Iterator.h"

@implementation Iterator

-(id)First{
    return nil;
}
-(id)Next{
    return nil;
}
-(BOOL)IsDone{
    return NO;
}
-(id)CurrentItem{
    return nil;
}
@end


ConcreteIterator類接口
復(fù)制代碼 代碼如下:

#import "Iterator.h"

@class ConcreteAggregate;
@interface ConcreteIterator :Iterator{
    ConcreteAggregate *myAggregate;
    int current;
}
-(ConcreteIterator*)MyInit:(ConcreteAggregate*)aggregate;
@end


ConcreteIterator類實現(xiàn)
復(fù)制代碼 代碼如下:

#import "ConcreteIterator.h"
#import "ConcreteAggregate.h"

@implementation ConcreteIterator

-(ConcreteIterator*)MyInit:(ConcreteAggregate*)aggregate{
    myAggregate = aggregate;
    return self;
}
-(id)First{
    return [myAggregate GetObject:0];
}
-(id)Next{
    current++;
    if(current< [myAggregate GetCount])
        return [myAggregate GetObject:current];
    else {
        return nil;
    }
}
-(BOOL)IsDone{
    return current>= [myAggregate GetCount] ?YES:NO;
}
-(id)CurrentItem{
    return [myAggregate GetObject:current];
}
@end


Aggregate類接口
復(fù)制代碼 代碼如下:

#import <Foundation/Foundation.h>

@class Iterator;
@interface Aggregate:NSObject
-(Iterator*)CreateIterator;
@end


Aggregate類實現(xiàn)
復(fù)制代碼 代碼如下:

#import "Aggregate.h"
#import "Iterator.h"

@implementation Aggregate
-(Iterator*)CreateIterator{
    return [[Iterator alloc]init];
}
@end


ConcreteAggregate類接口
復(fù)制代碼 代碼如下:

#import "Aggregate.h"

@interface ConcreteAggregate:Aggregate{
    NSMutableArray *items;
}
-(int)GetCount;
-(id)GetObject:(int)index;
-(void)InsertObject:(id)Obj;
@end


ConcreteAggregate類實現(xiàn)
復(fù)制代碼 代碼如下:

#import "ConcreteAggregate.h"
#import "Iterator.h"

@implementation ConcreteAggregate

-(id)init{
    if(self == [super init]){
        items = [NSMutableArray new];
    }
    return self;
}
-(Iterator*)CreateIterator{
    return [[Iterator alloc]init];
}
-(id)GetObject:(int)index{
    return [items objectAtIndex:index];
}
-(void)InsertObject:(id)Obj{
    [items addObject:Obj];
}
-(int)GetCount{
    return [items count];
}
@end


Main方法調(diào)用
復(fù)制代碼 代碼如下:

import <Foundation/Foundation.h>
#import "ConcreteAggregate.h"
#import "Iterator.h"
#import "ConcreteIterator.h"

int main (int argc, const char *argv[])
{
     @autoreleasepool {
         ConcreteAggregate *a = [[ConcreteAggregate alloc]init];
         [a InsertObject:@"張三"];
         [a InsertObject:@"李四"];
         [a InsertObject:@"王二"];
         [a InsertObject:@"麻子"];
         NSLog(@"Count:%d", [a GetCount]);
         Iterator *i = [[ConcreteIterator alloc]MyInit:a];
         while (![i IsDone]) {
             NSLog(@"%@,請買票",[i CurrentItem]);
             [i Next];
         }
     }
     return 0;
}


好啦,上面的四個類型簡單實現(xiàn)了迭代器模式,其實迭代器模式就是分離了集合對象的遍歷行為,抽象出一個迭代器類來負(fù)責(zé),這樣既可以做到不暴露集合的內(nèi)部結(jié)構(gòu),又可以讓外部代碼透明地訪問集合內(nèi)部地數(shù)據(jù)。

何時使用迭代器模式?

1.需要訪問組合對象的內(nèi)容,而又不暴漏其內(nèi)部表示。

2.需要通過多種方式遍歷組合對象。

3.需要提供一個統(tǒng)一的接口,用來遍歷各種類型的組合對象。

相關(guān)文章

  • iOS使用UICollectionView實現(xiàn)列表頭部拉伸效果

    iOS使用UICollectionView實現(xiàn)列表頭部拉伸效果

    這篇文章主要介紹了iOS使用UICollectionView實現(xiàn)列表頭部拉伸效果,OC和Swift兩個版本,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • iOS實現(xiàn)賬號、密碼記住功能

    iOS實現(xiàn)賬號、密碼記住功能

    這篇文章主要為大家詳細(xì)介紹了iOS實現(xiàn)賬號、密碼記住功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • iOS編程學(xué)習(xí)中關(guān)于throttle的那些事

    iOS編程學(xué)習(xí)中關(guān)于throttle的那些事

    這篇文章主要給大家介紹了關(guān)于iOS編程學(xué)習(xí)中throttle的那些事,文中通過示例代碼介紹的非常詳細(xì),對各位iOS的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • C++ 中exit(),_exit(),return,abort()函數(shù)的區(qū)別

    C++ 中exit(),_exit(),return,abort()函數(shù)的區(qū)別

    這篇文章主要介紹了C++ 中exit(),_exit(),return,abort()函數(shù)的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • IOS實現(xiàn)選擇城市后跳轉(zhuǎn)Tabbar效果

    IOS實現(xiàn)選擇城市后跳轉(zhuǎn)Tabbar效果

    這篇文章主要為大家詳細(xì)介紹了IOS實現(xiàn)選擇城市后跳轉(zhuǎn)Tabbar效果的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • iOS仿微博導(dǎo)航欄動畫(CoreGraphics)的實現(xiàn)方法

    iOS仿微博導(dǎo)航欄動畫(CoreGraphics)的實現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于iOS仿微博導(dǎo)航欄動畫(CoreGraphics)的實現(xiàn)方法,文章最后給出了完整的示例代碼,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • 關(guān)于iOS截圖你應(yīng)該知道的那些事兒

    關(guān)于iOS截圖你應(yīng)該知道的那些事兒

    這篇文章主要給大家介紹了關(guān)于iOS截圖你應(yīng)該知道的那些事兒,文中通過示例代碼介紹的非常詳細(xì),對各位iOS開發(fā)者們的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • 舉例講解設(shè)計模式中的原型模式在iOS應(yīng)用開發(fā)中的作用

    舉例講解設(shè)計模式中的原型模式在iOS應(yīng)用開發(fā)中的作用

    這篇文章主要介紹了設(shè)計模式中的原型模式在iOS應(yīng)用開發(fā)中的作用,示例代碼為傳統(tǒng)的Objective-C,需要的朋友可以參考下
    2016-04-04
  • 詳解iOS如何讓Lottie使用網(wǎng)絡(luò)資源做動畫的實現(xiàn)

    詳解iOS如何讓Lottie使用網(wǎng)絡(luò)資源做動畫的實現(xiàn)

    這篇文章主要為大家介紹了iOS如何讓Lottie使用網(wǎng)絡(luò)資源做動畫實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 談?wù)刬OS中的多繼承與多重代理

    談?wù)刬OS中的多繼承與多重代理

    這篇文章主要給大家介紹了關(guān)于iOS中多繼承與多重代理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10

最新評論

丹东市| 汝阳县| 夹江县| 钟祥市| 休宁县| 额尔古纳市| 靖江市| 鄂托克旗| 大化| 东至县| 屏东市| 长宁县| 利川市| 色达县| 望谟县| 滨海县| 周至县| 怀远县| SHOW| 乐山市| 乐山市| 沙田区| 龙州县| 郁南县| 水富县| 宁夏| 承德市| 绍兴县| 宽城| 雅江县| 凤阳县| 泗洪县| 柳州市| 巴里| 利川市| 清水河县| 汉寿县| 双城市| 荥阳市| 景宁| 安庆市|