iOS 之 責任鏈模式詳解

2021-07-10 16:40:32 字數 3078 閱讀 9425

設計模式在實際程式設計中對遇到的問題解決方案的抽象,也就是每乙個設計模式都在程式設計例項中有體現

責任鏈模式是一種物件的行為模式。在責任鏈模式裡,很多物件由每乙個物件對其下家的引用而連線起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某乙個物件決定處理此請求。

具體的請看 **例項 由於寫的比較 倉促 類的名字 命名不太規範

1. 首先建立 乙個協議繼承nsobject

#import

@protocol allprotocol

// 設定繼任者

-(void)setsuccessor:(id)successor;

//獲取繼任者

- (id)successor;

//處理請求

- (void)handlerequest:(id)request;

@end

2. 建立三個類 每個類遵循這個協議 例如

在 .h 檔案中

#import

#import "allprotocol.h"

@inte***ce person : nsobject

@end

person類

在person.h進行實現協議

#import "person.h"

@inte***ce person ()

//進行了強引用也可以使用weak

@property (nonatomic,strong) idnextsucessor;

@end

@implementation person

// 設定繼任者

-(void)setsuccessor:(id)successor

//獲取繼任者

- (id)successor

//處理請求

- (void)handlerequest:(id)requestelse  

}@end

whrite類

#import "whrite.h"

@inte***ce whrite ()

@property (nonatomic,strong) idnextsuccessor;

@end

@implementation whrite

// 設定繼任者

-(void)setsuccessor:(id)successor

//獲取繼任者

- (id)successor

//處理請求

- (void)handlerequest:(id)requestelse  

}@end

page 類

#import "page.h"

@inte***ce page ()

@property (nonatomic,strong)idnextsuccessor;

@end

@implementation page

// 設定繼任者

-(void)setsuccessor:(id)successor

//獲取繼任者

- (id)successor

//處理請求

- (void)handlerequest:(id)requestelse

}@end

由於是鏈結模式 都需要乙個結點下面 我們來建立乙個結點裡面實現的方法跟其他類一樣 不需要做任何的操作

#import "handel.h"

@inte***ce handel ()

@property (nonatomic,strong)idnextsuccessor;

@end

@implementation handel

// 設定繼任者

-(void)setsuccessor:(id)successor

//獲取繼任者

- (id)successor

//處理請求

- (void)handlerequest:(id)request

@end

在viewcontroller 的進行實現下 ,實際就是進行鍊錶的鏈結

#import "viewcontroller.h"

#import "person.h"

#import "handel.h"

#import "whrite.h"

#import "page.h"

@inte***ce viewcontroller ()

@property (nonatomic,strong)handel *hadle;

@property (nonatomic,strong)person *person;

@property (nonatomic,strong)page *pag;

@property (nonatomic,strong)whrite *whrite;

@end

@implementation viewcontroller

- (void)viewdidload

執行結果:

016-03-23 10:30:51.770 責任鏈模式[9183:91620] 是胖子

[self.hadle handlerequest:@"白"];

執行結果:

2016-03-23 11:10:50.023 責任鏈模式[11598:115485] 是白

責任鏈模式 把乙個職能分解處理 ,在實際運用的過程中我們可以進行類別的分配,上面的例子只是簡單地實現的一下,當傳遞的訊息被處理以後,就會中斷,被請求處理的時件 不會走完整個責任鏈,如果想讓把這條責任鏈走完,你可以在判斷的時候,無論事件 是否成立都讓資料處理鏈條進行傳遞下去。

iOS設計模式 責任鏈

ios設計模式 責任鏈 原理圖 在責任鏈模式裡,很多物件由每乙個物件對其下家的引用而連線起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某乙個物件決定處理此請求。發出這個請求的客戶端並不知道鏈上的哪乙個物件最終處理這個請求,這使得系統可以在不影響客戶端的情況下動態地重新組織和分配責任。原始碼 chai...

iOS設計模式 責任鏈

ios設計模式 責任鏈 原理圖 說明在責任鏈模式裡,很多物件由每乙個物件對其下家的引用而連線起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某乙個物件決定處理此請求。發出這個請求的客戶端並不知道鏈上的哪乙個物件最終處理這個請求,這使得系統可以在不影響客戶端的情況下動態地重新組織和分配責任。原始碼 ch...

設計模式之 責任鏈模式

在一些情況下,對乙個訊息 含事件 的響應和處理需要很多物件來參與,這些物件對訊息的處理有前後順序,形成乙個處理鏈條,但物件是否真正處理訊息有賴於在它之前的物件的處理策略,前乙個物件處理後,後乙個物件則不需參與處理,這就是責任鏈模式。現實中有很多類似的場景,比如上訪,上訪一般是從最基層的信訪部門接受信...