用OC程式碼認識設計模式(三) 行為型模式

韋家冰發表於2017-12-13

用OC程式碼認識設計模式(一)--建立型模式 用OC程式碼認識設計模式(二)--結構型模式 用OC程式碼認識設計模式(三)--行為型模式 用OC程式碼認識六大設計原則

####行為型模式 #####1、責任鏈模式(Chain of Responsibility) 定義:為請求建立了一個接收者物件的鏈。使多個物件都有機會處理請求,從而避免了請求的傳送者和接受者之前的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,知道有物件處理它為止。

OC程式碼:請假流程,各個級別能批不同的天數,例如:組長(1-5天);超過5天就需要請示技術總監(5-10);超過10天請示總經理

責任鏈模式.png
#####2、命令模式 定義:命令模式將請求封裝成物件,從而可用不同的請求對客戶進行引數化,對請求排隊或記錄請求日誌,以及支援可撤銷和恢復的操作。

OC程式碼:擼串流程

命令模式.png

#####3、中介者模式 定義:中介者模式就是用一箇中介物件來封裝一系列的物件互動,中介者使各物件不需要顯式地相互引用,從而使其耦合鬆散,而且可以獨立地改變它們之間的互動。

OC程式碼:

中介者模式.png

#####4、觀察者模式(Observer) 定義:定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某一個主題物件。這個主題物件在狀態發生變化時,會通知所有觀察者物件,使它們能夠自動更新自己。

OC程式碼:通知NSNotificationCenter以及KVO都是觀察者模式的具體實現

#####5、備忘錄模式(Memento) 定義:在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。

OC程式碼:

備忘錄模式.png

#####6、策略模式(Strategy) 定義:定義一系列的演算法,把它們獨立封裝起來,並且使它們可相互替換。 策略模式、狀態模式、簡單工廠模式三者都很相似,他們的區別在於: (1)策略模式只是在物件初始化的時候更改執行模式。程式碼體現:initWithObj (2)狀態模式是根據物件例項的週期時間而動態地改變物件例項的執行模式。程式碼體現:setObj (3)簡單工廠是建立型模式,使用type建立物件;策略模式是使用演算法物件建立。程式碼體現:initWithType OC程式碼:

三種相似的模式.png

#####7、訪問者模式(Visitor) 定義:訪問者模式封裝了一些作用於某種資料結構中的各元素操作,它可以在不改變資料結構的前提下定義作用於這些元素的新的操作。

OC程式碼:

訪問者模式.png

#####8、模板方法模式(TemplateMethod) 定義: 定義一個操作中的演算法的框架,而降一些步驟延遲到子類中。使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。

例如: 1、父類:銀行業務:{1、取號,2、辦業務,3、完成}, 2、子類:取款、存款、貸款子類,就只需要過載“辦業務”方法。

#####9、狀態模式(State) 定義:當一個物件內在狀態改變時允許其改變行為,這個物件看起來像改變了其類。

OC程式碼:

狀態模式.png

#####10、迭代器模式(Iterator) 定義:迭代器模式提供一種方法訪問一個容器物件中各個元素,而又不需暴露該物件的內部細節。

OC程式碼:在 Cocoa Touch 中的 NSEnumerator類 就實現了迭代器模式。還有基於塊的列舉也是迭代器模式的實現等等

    NSEnumerator * myEnumerator = [myDic keyEnumerator];  
    for (NSObject *object in myEnumerator) {  
        NSLog(@"遍歷KEY的值: %@",object);  
    }
複製程式碼
    [arr enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        
    }];
複製程式碼

#####11、直譯器模式(Interpreter) 定義:給定一門語言,定義它的文法的一種表示,並定義一個直譯器,該直譯器使用該表示來解釋語言中的句子。

OC程式碼:實際運用如正則語法、XML、JSON

NSDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:nil];
複製程式碼

相關文章