码迷,mamicode.com
首页 > 其他好文 > 详细

中介者模式

时间:2014-06-07 05:32:01      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   java   

在iOS当中,如果控制器数量非常多,那么可以把它们之间的跳转逻辑独立到一个单独的类当中,这个类就是中介者。

实现中介者模式其实没必要按照类图来,没有必要把“中介”和“同事”做成抽象。这个中介者可以是一个单例。

下面给出一个用中介者来控制跳转的例子。

首先是中介者的定义:

bubuko.com,布布扣
 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
bubuko.com,布布扣

这里定义了一个导演类负责控制器的切换,为了方便起见,定义了一个NavigationController属性,也可以根据需求不这么做。

并且,在这里定义了一个用于处理跳转的方法,留出了一个sender和一个字符串标记,因为不同界面可能有很多个按钮,但是给每个按钮都加TAG很不合理,所以干脆采用一个字符串。

在应用程序代理当中,设置NavigationController:

1 [[RPControllerDirector sharedInstance] registNavigationController:rootNC];

中介者的实现:

bubuko.com,布布扣
 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 }
bubuko.com,布布扣

首先将中介者定义为单例模式,这里省略了单例的内存处理相关代码,之后实现了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 }

 

 

中介者模式,布布扣,bubuko.com

中介者模式

标签:c   style   class   blog   code   java   

原文地址:http://www.cnblogs.com/Steak/p/3755753.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!