首页 > 代码库 > 中介者模式
中介者模式
在iOS当中,如果控制器数量非常多,那么可以把它们之间的跳转逻辑独立到一个单独的类当中,这个类就是中介者。
实现中介者模式其实没必要按照类图来,没有必要把“中介”和“同事”做成抽象。这个中介者可以是一个单例。
下面给出一个用中介者来控制跳转的例子。
首先是中介者的定义:
1 #import <Foundation/Foundation.h> 2 3 @interface RPControllerDirector : NSObject 4 5 + (RPControllerDirector *)sharedInstance; 6 7 - (void)registNavigationController:(UINavigationController *)navigationController; 8 - (void)requestViewChange:(id)sender withIdentifier:(NSString *)identifier; 9 10 @end
这里定义了一个导演类负责控制器的切换,为了方便起见,定义了一个NavigationController属性,也可以根据需求不这么做。
并且,在这里定义了一个用于处理跳转的方法,留出了一个sender和一个字符串标记,因为不同界面可能有很多个按钮,但是给每个按钮都加TAG很不合理,所以干脆采用一个字符串。
在应用程序代理当中,设置NavigationController:
1 [[RPControllerDirector sharedInstance] registNavigationController:rootNC];
中介者的实现:
1 static RPControllerDirector *sharedInstance = nil; 2 3 @interface RPControllerDirector () 4 5 @property (weak, nonatomic) UINavigationController *navigationController; 6 7 @end 8 9 @implementation RPControllerDirector 10 11 + (RPControllerDirector *)sharedInstance { 12 if (sharedInstance == nil) { 13 @synchronized(self) { 14 if (sharedInstance == nil) { 15 sharedInstance = [[RPControllerDirector alloc] init]; 16 } 17 } 18 } 19 return sharedInstance; 20 } 21 22 - (void)registNavigationController:(UINavigationController *)navigationController { 23 self.navigationController = navigationController; 24 }
首先将中介者定义为单例模式,这里省略了单例的内存处理相关代码,之后实现了navigationController。
关键是跳转方法的实现:
1 - (void)requestViewChange:(id)sender withIdentifier:(NSString *)identifier { 2 if ([identifier isEqualToString: @"RootViewController_Btn1"]) { 3 RPOneViewController *oneViewController = [[RPOneViewController alloc] init]; 4 [self.navigationController pushViewController:oneViewController animated:YES]; 5 }
首先判断事件是从哪发出来的,然后进行跳转。这里只给出了一个按钮的跳转。
在按钮点击方法当中,只要调用中介者单例的对应方法即可:
1 - (void)onBtnClick:(UIButton *)sender { 2 [[RPControllerDirector sharedInstance] requestViewChange:sender withIdentifier:@"RootViewController_Btn1"]; 3 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。