亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS App設計模式開發中對interpreter解釋器模式的運用

2020-07-26 03:23:28
字體:
來源:轉載
供稿:網友

解釋器模式

今天和大家分享的模式是解釋器模式。

首先介紹一下解釋器模式適合解決哪類問題。

其實,解釋器模式需要解決的問題是,如果一種特定類型的問題發生的頻率足夠高,那么可能就值得將該問題的各個實例表述為一個簡單語言的句子。這樣就可以構建一個解釋器,該解釋器通過解釋這些句子來解決該問題。

就應用的例子來說,例如正則表達式就是它的一種具體應用,解釋器可以為正則表示定義一個文法,如何表示一個特定的正則表達式,以及如何解釋這個正則表達式。
解釋器模式的類結構圖如下。

201646103109779.jpg (500×333)

圖中的結構也比較好理解,解釋器方法抽象出一個統一的接口(AbstractExpression),于需要解釋的內容(Context)做了解耦,調用時為具體的解釋器方法傳入內容(Context)從而實現相應的解釋功能。

那么解釋器模式有什么好處呢?

其實用了解釋器模式,就意味著可以很容易地改變和擴展文法,因為該模式使用類來表示文法規則,你可以使用繼承來改變或擴展該文法。也比較容易實現文法,因為定義抽象語法樹中各個節點的類的實現大體類似,這些類都易于直接編寫。

那么除了之前提到的正則表達式這種應用之外,其實用處還是很廣的,當然了主要還是對文本的解釋。

除了好處,其實解釋器模式還是有不足的,解釋器模式為文法中的每一條規則至少定義了一個類,因此包含許多規則的文法可能難以管理和維護。建議當文法非常復雜時,使用其他的技術如語法分析程序或編譯器生成器來處理。

說了不少,下面用代碼簡單展示一下解釋器模式的具體實現。

實現

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

Context類接口

復制代碼 代碼如下:

#import <Foundation/Foundation.h>

@interface Context :NSObject
@property NSString *Input;
@property NSString *Output;
@end


Context類實現
復制代碼 代碼如下:

#import "Context.h"

@implementation Context
@synthesize Input,Output;
@end


AbstractExpression類接口
復制代碼 代碼如下:

#import <Foundation/Foundation.h>

@class Context;
@interface AbstractExpression:NSObject
-(void)Interpret:(Context*)context;
@end


AbstractExpression類實現
復制代碼 代碼如下:

#import "AbstractExpression.h"

@implementation AbstractExpression
-(void)Interpret:(Context *)context{
    return;
}
@end


TerminalExpression類接口
復制代碼 代碼如下:

#import "AbstractExpression.h"

@interface TerminalExpression :AbstractExpression
@end


TerminalExpression類實現
復制代碼 代碼如下:

#import "TerminalExpression.h"

@implementation TerminalExpression
-(void)Interpret:(Context *)context{
    NSLog(@"終端解釋器");
}
@end


NonterminalExpression類接口
復制代碼 代碼如下:

#import "AbstractExpression.h"

@interface NonterminalExpression:AbstractExpression
@end


NonterminalExpression類實現
復制代碼 代碼如下:

#import "NonterminalExpression.h"

@implementation NonterminalExpression
-(void)Interpret:(Context *)context{
    NSLog(@"非終端解釋器");
}
@end


Main方法調用
復制代碼 代碼如下:

#import <Foundation/Foundation.h>
#import "Context.h"
#import "TerminalExpression.h"
#import "NonterminalExpression.h"

int main (int argc,const char * argv[])
{
    @autoreleasepool{
        Context *context = [[Contextalloc]init];
        NSMutableArray*list = [[NSMutableArrayalloc]init];
        [list addObject:[[TerminalExpressionalloc]init]];
        [list addObject:[[NonterminalExpressionalloc]init]];
        [list addObject:[[TerminalExpressionalloc]init]];
        [list addObject:[[TerminalExpressionalloc]init]];
        for (AbstractExpression *exp in list) {
            [exp Interpret:context];
        }
    }
    return 0;
}


好啦,上面這些代碼只是做了簡單的展示而已。關鍵還是要靈活應用啊。

總結
解釋器模式屬于類的行為型模式,描述了如何為語言定義一個文法,如何在該語言中表示一個句子,以及如何解釋這些句子,這里的“語言”是使用規定格式和語法的代碼。解釋器模式主要用在編譯器中,在應用系統開發中很少用到。
優點:
1)容易修改并擴展語法。
2)更容易實現語法。
使用場景:
1)語言的語法比較簡單。
2)效率并不是最主要的問題。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美性猛交xxxx免费看久久久| 欧美劲爆第一页| 日韩高清电影免费观看完整版| 91chinesevideo永久地址| 91在线观看免费网站| 国产精品黄色影片导航在线观看| 亚洲欧美福利视频| 日韩中文字幕不卡视频| 国产精品美乳在线观看| 91视频-88av| 精品亚洲一区二区| 欧美一级片在线播放| 久久精品国产亚洲精品2020| 欧美孕妇毛茸茸xxxx| 国内精品小视频| 亚洲第一综合天堂另类专| 久久精品视频导航| 国产69精品久久久久9| 91精品国产91久久久久久吃药| 国产精品久久久av| 精品久久香蕉国产线看观看亚洲| 欧美黄色www| 亚洲va电影大全| 久久精品国产成人精品| 欧美重口另类videos人妖| 国产亚洲欧美一区| 亚洲精品中文字幕av| 国产91精品久久久久久| 久久777国产线看观看精品| 亚洲人成电影网站色www| 欧美理论片在线观看| 亚洲人成绝费网站色www| 日本精品久久久久久久| 国产精品96久久久久久| 亚洲视频一区二区三区| 91成人在线视频| 日韩电影大片中文字幕| 欧美日韩日本国产| 91精品视频在线| 国产精品美女网站| 欧美日韩另类字幕中文| 欧美日韩国产页| 国产精品视频久| 日韩欧美a级成人黄色| 亚洲高清av在线| 亚洲欧美三级在线| 国产精品av网站| 国产精品美女久久久久av超清| 97久久精品视频| 主播福利视频一区| 亚洲国产欧美日韩精品| 亚洲韩国日本中文字幕| 国产精品9999| 日韩精品极品视频| 国产又爽又黄的激情精品视频| 日韩在线精品一区| 精品国产欧美一区二区五十路| 97精品国产aⅴ7777| 亚洲精品v欧美精品v日韩精品| 亚洲欧洲在线观看| 欧美日韩一区二区三区在线免费观看| 亚洲免费福利视频| 成人免费高清完整版在线观看| 性欧美办公室18xxxxhd| 色偷偷亚洲男人天堂| 一区二区三区日韩在线| 亚洲国产天堂久久综合| 自拍偷拍免费精品| 国产成人在线精品| 91久久在线视频| 久久91亚洲人成电影网站| 日韩精品一区二区三区第95| 日韩国产欧美精品一区二区三区| 欧美激情视频免费观看| 亚洲第一区中文字幕| 孩xxxx性bbbb欧美| 午夜精品一区二区三区在线视频| 一道本无吗dⅴd在线播放一区| 色777狠狠综合秋免鲁丝| 国内精品视频久久| 91中文在线视频| 热久久免费国产视频| 亚洲jizzjizz日本少妇| 日韩欧美高清视频| 久久人91精品久久久久久不卡| 亚洲男人天堂古典| 精品久久久在线观看| 日韩不卡在线观看| 国产一区二区三区在线观看视频| 亚洲图中文字幕| 欧美成人精品h版在线观看| 亚洲一区久久久| 国产成人福利网站| 日韩电影中文字幕一区| 98视频在线噜噜噜国产| 日韩高清欧美高清| 国产精品成人av性教育| xxxxxxxxx欧美| 黑人精品xxx一区一二区| 欧美综合在线第二页| 午夜精品蜜臀一区二区三区免费| 久久久久久久一区二区| 亚洲国产一区二区三区四区| 成人在线视频网站| 中文字幕一区二区精品| 91夜夜揉人人捏人人添红杏| 高清在线视频日韩欧美| 最近中文字幕mv在线一区二区三区四区| 中文字幕亚洲欧美在线| 成人黄色片网站| 青草青草久热精品视频在线网站| 91av网站在线播放| 亚洲经典中文字幕| 国产精品高潮在线| 国产精品999999| 日韩美女视频中文字幕| 日本欧美一二三区| 亚洲自拍小视频免费观看| 久久伊人精品一区二区三区| 日韩黄色在线免费观看| 岛国av一区二区在线在线观看| 国产视频久久久久久久| 久久久久久久一区二区| 日韩中文字幕网址| 青青草原一区二区| 国产亚洲一区二区精品| 国产视频在线一区二区| 久久91精品国产| 国产有码在线一区二区视频| 久久婷婷国产麻豆91天堂| 国产精品成av人在线视午夜片| zzijzzij亚洲日本成熟少妇| 久久色免费在线视频| 韩国国内大量揄拍精品视频| 欧美午夜无遮挡| 色婷婷av一区二区三区久久| 在线视频精品一| 国产日韩欧美黄色| 国产午夜精品美女视频明星a级| 日韩中文在线中文网三级| 俺去亚洲欧洲欧美日韩| 国产欧美日韩中文| 九九热视频这里只有精品| 成人妇女淫片aaaa视频| 欧美另类第一页| 国产精品高清在线观看| 亚洲人成网站色ww在线| 欧美亚洲视频一区二区| 777777777亚洲妇女| 亚洲精品女av网站| 国产精品高潮呻吟久久av黑人| 在线播放精品一区二区三区| www.久久久久| 日韩电影网在线| 日韩电影在线观看中文字幕| 久久久中精品2020中文| 国产精品69精品一区二区三区| 欧美国产在线电影| 欧美理论电影网| 九九久久综合网站| 日韩av在线网址| 亚洲va久久久噜噜噜久久天堂| 亚洲精品免费网站| 成人黄色片在线|