Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
iOS ×é¼þ»¯·½°¸Ì½Ë÷
 
  2552  次浏览      29
 2018-3-14 
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚBang,ÎÄÕÂÖ÷Òª½²ÁËBang¹ØÓÚ¡¶iOSÓ¦Óüܹ¹Ì¸ ×é¼þ»¯·½°¸¡·¡¶Ä¢¹½½Ö App µÄ×é¼þ»¯Ö®Â·¡·¡¶Ä¢¹½½Ö App µÄ×é¼þ»¯Ö®Â·¡¤Ðø¡·µÄ½âÎö¡£

¿´ÁË Limboy(Ä¢¹½½ÖAppµÄ×é¼þ»¯Ö®Â· ºÍ Ä¢¹½½ÖAppµÄ×é¼þ»¯Ö®Â· Ðø) ºÍ CasaTaloyum (ÎÄÕÂ) ¶Ô iOS ×é¼þ»¯·½°¸µÄÌÖÂÛ£¬Ð´ÆªÎÄÕÂÊáÀíÏÂ˼·¡£

Ê×ÏÈÎÒ¾õµÃ¡±×é¼þ¡±ÔÚÕâÀﲻ̫ºÏÊÊ£¬ÒòΪ°´ÎÒÀí½â×é¼þÊÇÖ¸±È½ÏСµÄ¹¦Äܿ飬ÕâЩ×é¼þ²»ÐèÒª¶àÉÙ×é¼þ¼äͨÐÅ£¬Ã»Ê²Ã´ÒÀÀµ£¬Ò²¾Í²»ÐèÒª×öʲôÆäËû´¦Àí£¬ÃæÏò¶ÔÏó¾ÍÄܸ㶨¡£¶øÕâÀïÌáµ½µÄÊǽϴóÁ£¶ÈµÄÒµÎñ¹¦ÄÜ£¬ÎÒÃÇϰ¹ß³ÆÎª¡±Ä£¿é¡±¡£ÎªÁË·½±ã±íÊö£¬ÏÂÃæÄ£¿éºÍ×é¼þ´ú±íͬһ¸öÒâ˼£¬¶¼ÊÇÖ¸½Ï´óÁ£¶ÈµÄÒµÎñÄ£¿é¡£

Ò»¸ö APP Óжà¸öÄ£¿é£¬Ä£¿éÖ®¼ä»áͨÐÅ£¬»¥Ïàµ÷Óã¬ÀýÈç΢ÐŶÁÊéÓÐ Êé¼®ÏêÇé Ïë·¨Áбí ÔĶÁÆ÷ ·¢ÏÖ¿¨Æ¬ µÈµÈÄ£¿é£¬ÕâЩģ¿é»á»¥Ïàµ÷Óã¬ÀýÈç Êé¼®ÏêÇéÒªµ÷ÆðÔĶÁÆ÷ºÍÏë·¨ÁÐ±í£¬ÔĶÁÆ÷Òªµ÷ÆðÏë·¨ÁбíºÍÊé¼®ÏêÇ飬µÈµÈ£¬Ò»°ãÎÒÃÇÊÇÔõÑùµ÷ÓÃÄØ£¬ÒÔÔĶÁÆ÷ΪÀý£¬»áÕâÑùд£º

#import "WRBookDetailViewController.h"
#import "WRReviewViewController.h"
@implementation WRReadingViewController
- (void)gotoDetail {
WRBookDetailViewController *detailVC = [[WRBookDetailViewController alloc] initWithBookId:self.bookId];
[self.navigationController pushViewController:detailVC animated:YES];
}
- (void)gotoReview {
WRReviewViewController *reviewVC = [[WRReviewViewController alloc] initWithBookId:self.bookId reviewType:1];
[self.navigationController pushViewController:reviewVC animated:YES];
}
@end

¿´ÆðÀ´Í¦ºÃ£¬ÕâÑù×ö¼òµ¥Ã÷ÁË£¬Ã»ÓжàÓàµÄ¶«Î÷£¬ÏîÄ¿³õÆÚÍÆ¼öÕâÑù¿ìËÙ¿ª·¢£¬µ«µ½ÁËÏîĿԽÀ´Ô½ÅÓ´ó£¬ÕâÖÖ·½Ê½»áÓÐʲôÎÊÌâÄØ£¿ÏÔ¶øÒ×¼û£¬Ã¿¸öÄ£¿é¶¼Àë²»¿ªÆäËûÄ£¿é£¬»¥ÏàÒÀÀµÕ³ÔÚÒ»Æð³ÉΪһÛ磺

ÕâÑùÈà³ÉÒ»Ûç¶Ô²âÊÔ/±àÒë/¿ª·¢Ð§ÂÊ/ºóÐøÀ©Õ¹¶¼ÓÐһЩ»µ´¦£¬ÄÇÔõô½â¿ªÕâÒ»ÛçÄØ¡£ºÜ¼òµ¥£¬°´Èí¼þ¹¤³ÌµÄ˼·£¬ÏÂÒâʶ¾Í»á¼ÓÒ»¸öÖмä²ã£º

½ÐËû Mediator Manager Router ʲô¶¼ÐУ¬·´Õý¾ÍÊǸºÔðת·¢ÐÅÏ¢µÄÖмä²ã£¬ÔÝÇÒ½ÐËû Mediator¡£

¿´ÆðÀ´Ë³ÑÛ¶àÁË£¬µ«ÕâÀïÓм¸¸öÎÊÌ⣺

  1. Mediator Ôõôȥת·¢×é¼þ¼äµ÷Óã¿
  2. Ò»¸öÄ£¿éÖ»¸ú Mediator ͨÐÅ£¬Ôõô֪µÀÁíÒ»¸öÄ£¿éÌṩÁËʲô½Ó¿Ú£¿
  3. °´ÉÏͼµÄ»­·¨£¬Ä£¿éºÍ Mediator ¼ä»¥ÏàÒÀÀµ£¬ÔõÑùÆÆ³ýÕâ¸öÒÀÀµ£¿

·½°¸1

¶ÔÓÚǰÁ½¸öÎÊÌ⣬×îÖ±½ÓµÄ·´Ó¦¾ÍÊÇÔÚ Mediator Ö±½ÓÌṩ½Ó¿Ú£¬µ÷ÓöÔӦģ¿éµÄ·½·¨£º

//Mediator.m
#import "BookDetailComponent.h"
#import "ReviewComponent.h"
@implementation Mediator
+ (UIViewController *)BookDetailComponent_viewController:(NSString *)bookId {
return [BookDetailComponent detailViewController:bookId];
}
+ (UIViewController *)ReviewComponent_viewController:(NSString *)bookId reviewType:(NSInteger)type {
return [ReviewComponent reviewViewController:bookId type:type];
}
@end

 

//BookDetailComponent ×é¼þ
#import "Mediator.h"
#import "WRBookDetailViewController.h"
@implementation BookDetailComponent
+ (UIViewController *)detailViewController:(NSString *)bookId {
WRBookDetailViewController *detailVC = [[WRBookDetailViewController alloc] initWithBookId:bookId];
return detailVC;
}
@end

 

//ReviewComponent ×é¼þ
#import "Mediator.h"
#import "WRReviewViewController.h"
@implementation ReviewComponent
+ (UIViewController *)reviewViewController:(NSString *)bookId type:(NSInteger)type {
UIViewController *reviewVC = [[WRReviewViewController alloc] initWithBookId:bookId type:type];
return reviewVC;
}
@end

È»ºóÔÚÔĶÁÄ£¿éÀ

//WRReadingViewController.m
#import "Mediator.h"
@implementation WRReadingViewController
- (void)gotoDetail:(NSString *)bookId {
UIViewController *detailVC = [Mediator BookDetailComponent_viewControllerForDetail:bookId];
[self.navigationController pushViewController:detailVC];
UIViewController *reviewVC = [Mediator ReviewComponent_viewController:bookId type:1];
[self.navigationController pushViewController:reviewVC];
}
@end

Õâ¾ÍÊÇÒ»¿ªÊ¼¼Ü¹¹Í¼µÄʵÏÖ£¬¿´ÆðÀ´ÏÔÈ»ÕâÑù×ö²¢Ã»ÓÐʲôºÃ´¦£¬ÒÀÀµ¹ØÏµ²¢Ã»Óнâ³ý£¬Mediator ÒÀÀµÁËËùÓÐÄ£¿é£¬¶øµ÷ÓÃÕßÓÖÒÀÀµ Mediator£¬×îºó»¹ÊÇÒ»Û绥ÏàÒÀÀµ£¬¸úÔ­À´Ã»ÓÐ Mediator µÄ·½°¸Ïà±È³ýÁ˸üÂé·³µãÆäËûÃ»Çø±ð¡£

ÄÇÔõô°ìÄØ¡£

ÔõÑùÈÃMediator½â³ý¶Ô¸÷¸ö×é¼þµÄÒÀÀµ£¬Í¬Ê±ÓÖÄܵ÷µ½¸÷¸ö×é¼þ±©Â¶³öÀ´µÄ·½·¨£¿¶ÔÓÚOCÓÐÒ»¸ö·¨±¦¿ÉÒÔ×öµ½£¬¾ÍÊÇruntime·´Éäµ÷Óãº

//Mediator.m
@implementation Mediator
+ (UIViewController *)BookDetailComponent_viewController:(NSString *)bookId {
Class cls = NSClassFromString(@"BookDetailComponent");
return [cls performSelector:NSSelectorFromString(@"detailViewController:") withObject:@{@"bookId":bookId}];
}
+ (UIViewController *)ReviewComponent_viewController:(NSString *)bookId type:(NSInteger)type {
Class cls = NSClassFromString(@"ReviewComponent");
return [cls performSelector:NSSelectorFromString(@"reviewViewController:") withObject:@{@"bookId":bookId, @"type": @(type)}];
}
@end

ÕâÏ Mediator ûÓÐÔÙ¶Ô¸÷¸ö×é¼þÓÐÒÀÀµÁË£¬Äã¿´ÒѾ­²»ÐèÒª #import ʲô¶«Î÷ÁË£¬¶ÔÓ¦µÄ¼Ü¹¹Í¼¾Í±ä³É£º

Ö»Óе÷ÓÃÆäËû×é¼þ½Ó¿Úʱ²ÅÐèÒªÒÀÀµ Mediator£¬×é¼þ¿ª·¢Õß²»ÐèÒªÖªµÀ Mediator µÄ´æÔÚ¡£

µÈµÈ£¬¼ÈÈ»ÓÃruntime¾Í¿ÉÒÔ½âñîÈ¡ÏûÒÀÀµ£¬ÄÇ»¹ÒªMediator×öʲô£¿×é¼þ¼äµ÷ÓÃʱֱ½ÓÓÃruntime½Ó¿Úµ÷²»¾ÍÐÐÁË£¬ÕâÑù¾Í¿ÉÒÔûÓÐÈκÎÒÀÀµ¾ÍÍê³Éµ÷Óãº

//WRReadingViewController.m
@implementation WRReadingViewController
- (void)gotoReview:(NSString *)bookId {
Class cls = NSClassFromString(@"ReviewComponent");
UIViewController *reviewVC = [cls performSelector:NSSelectorFromString(@"reviewViewController:") withObject:@{@"bookId":bookId, @"type": @(1)}];
[self.navigationController pushViewController:reviewVC];
}
@end

ÕâÑù¾ÍÍêÈ«½âñîÁË£¬µ«ÕâÑù×öµÄÎÊÌâÊÇ£º

  1. µ÷ÓÃÕßдÆðÀ´ºÜ¶ñÐÄ£¬´úÂëÌáʾ¶¼Ã»ÓУ¬Ã¿´Îµ÷ÓÃдһÛç¡£
  2. runtime·½·¨µÄ²ÎÊý¸öÊýºÍÀàÐÍÏÞÖÆ£¬µ¼ÖÂÖ»ÄÜÿ¸ö½Ó¿Ú¶¼Í³Ò»´«Ò»¸ö NSDictionary¡£Õâ¸ö NSDictionaryÀïµÄkey valueÊÇʲô²»Ã÷È·£¬ÐèÒªÕÒ¸öµØ·½Ð´ÎĵµËµÃ÷ºÍ²é¿´¡£
  3. ±àÒëÆ÷²ãÃæ²»ÒÀÀµÆäËû×é¼þ£¬Êµ¼ÊÉÏ»¹ÊÇÒÀÀµÁË£¬Ö±½ÓÔÚÕâÀïµ÷Óã¬Ã»ÓÐÒýÈëµ÷ÓõÄ×é¼þʱ¾Í¹ÒÁË

°ÑËüÒÆµ½Mediatorºó£º

  1. µ÷ÓÃÕßдÆðÀ´²»¶ñÐÄ£¬´úÂëÌáʾҲÓÐÁË¡£
  2. ²ÎÊýÀàÐͺ͸öÊýÎÞÏÞÖÆ£¬ÓÉ Mediator ȥת¾ÍÐÐÁË£¬×é¼þÌṩµÄ»¹ÊÇÒ»¸ö NSDictionary ²ÎÊýµÄ½Ó¿Ú£¬µ«ÔÚMediator Àï¿ÉÒÔÌṩÈÎÒâÀàÐͺ͸öÊýµÄ²ÎÊý£¬ÏñÉÏÃæµÄÀý×ÓÏÔʽҪÇó²ÎÊý NSString *bookId ºÍ NSInteger type¡£
  3. Mediator¿ÉÒÔ×öͳһ´¦Àí£¬µ÷ÓÃij¸ö×é¼þ·½·¨Ê±Èç¹ûij¸ö×é¼þ²»´æÔÚ£¬¿ÉÒÔ×öÏàÓ¦²Ù×÷£¬Èõ÷ÓÃÕßÓë×é¼þ¼äûÓÐñîºÏ¡£

µ½ÕâÀ»ù±¾ÉÏÄܽâ¾öÎÒÃǵÄÎÊÌ⣺¸÷×é¼þ»¥²»ÒÀÀµ£¬×é¼þ¼äµ÷ÓÃÖ»ÒÀÀµÖмä¼þMediator£¬Mediator²»ÒÀÀµÆäËû×é¼þ¡£½ÓÏÂÀ´¾ÍÊÇÓÅ»¯ÕâÌ×д·¨£¬ÓÐÁ½¸öÓÅ»¯µã£º

  1. Mediator ÿһ¸ö·½·¨ÀﶼҪд runtime ·½·¨£¬¸ñʽÊÇÈ·¶¨µÄ£¬ÕâÊÇ¿ÉÒÔ³éÈ¡³öÀ´µÄ¡£
  2. ÿ¸ö×é¼þ¶ÔÍâ·½·¨¶¼ÒªÔÚ Mediator дһ±é£¬×é¼þÒ»¶à Mediator ÀàµÄ³¤¶ÈÊǿֲÀµÄ¡£

ÓÅ»¯ºó¾Í³ÉÁË casa µÄ·½°¸£¬target-action ¶ÔÓ¦µÚÒ»µã£¬target¾ÍÊÇclass£¬action¾ÍÊÇselector£¬Í¨¹ýһЩ¹æÔò¼ò»¯¶¯Ì¬µ÷Óá£Category ¶ÔÓ¦µÚ¶þµã£¬Ã¿¸ö×é¼þдһ¸ö Mediator µÄ Category£¬Èà Mediator ²»ÖÁÓÚÌ«³¤¡£ÕâÀïÓиödemo

×ܽáÆðÀ´¾ÍÊÇ£¬×é¼þͨ¹ýÖмä¼þͨÐÅ£¬Öмä¼þͨ¹ý runtime ½Ó¿Ú½âñͨ¹ý target-action ¼ò»¯Ð´·¨£¬Í¨¹ý category ¸Ð¹ÙÉÏ·ÖÀë×é¼þ½Ó¿Ú´úÂë¡£

·½°¸2

»Øµ½ Mediator ×î³õµÄÈý¸öÎÊÌ⣬̹½½ÖÓõÄÊÇÁíÒ»ÖÖ·½Ê½½â¾ö£º×¢²á±íµÄ·½Ê½£¬ÓÃURL±íʾ½Ó¿Ú£¬ÔÚÄ£¿éÆô¶¯Ê±×¢²áÄ£¿éÌṩµÄ½Ó¿Ú£¬Ò»¸ö¼ò»¯µÄʵÏÖ£º

//Mediator.m Öмä¼þ
@implementation Mediator
typedef void (^componentBlock) (id param);
@property (nonatomic, storng) NSMutableDictionary *cache
- (void)registerURLPattern:(NSString *)urlPattern toHandler:(componentBlock)blk {
[cache setObject:blk forKey:urlPattern];
}
- (void)openURL:(NSString *)url withParam:(id)param {
componentBlock blk = [cache objectForKey:url];
if (blk) blk(param);
}
@end

 

//BookDetailComponent ×é¼þ
#import "Mediator.h"
#import "WRBookDetailViewController.h"
+ (void)initComponent {
[[Mediator sharedInstance] registerURLPattern:@"weread://bookDetail" toHandler:^(NSDictionary *param) {
WRBookDetailViewController *detailVC = [[WRBookDetailViewController alloc] initWithBookId:param[@"bookId"]];
[[UIApplication sharedApplication].keyWindow.rootViewController.navigationController pushViewController:detailVC animated:YES];
}];
}

 

//WRReadingViewController.m µ÷ÓÃÕß
//ReadingViewController.m
#import "Mediator.h"
+ (void)gotoDetail:(NSString *)bookId {
[[Mediator sharedInstance] openURL:@"weread://bookDetail" withParam:@{@"bookId": bookId}];
}

ÕâÑùͬÑù×öµ½Ã¿¸öÄ£¿é¼äûÓÐÒÀÀµ£¬Mediator Ò²²»ÒÀÀµÆäËû×é¼þ£¬²»¹ýÕâÀï²»Ò»ÑùµÄÒ»µãÊÇ×é¼þ±¾ÉíºÍµ÷ÓÃÕß¶¼ÒÀÀµÁËMediator£¬²»¹ýÕâ²»ÊÇÖØµã£¬¼Ü¹¹Í¼»¹ÊǸú·½°¸1Ò»Ñù¡£

¸÷¸ö×é¼þ³õʼ»¯Ê±Ïò Mediator ×¢²á¶ÔÍâÌṩµÄ½Ó¿Ú£¬Mediator ͨ¹ý±£´æÔÚÄÚ´æµÄ±íÈ¥ÖªµÀÓÐÄÄЩģ¿éÄÄЩ½Ó¿Ú£¬½Ó¿ÚµÄÐÎʽÊÇ URL->block¡£

ÕâÀïÅ׿ªURLµÄÔ¶³Ìµ÷Óúͱ¾µØµ÷ÓûìÔÚÒ»Æðµ¼ÖµÄÎÊÌ⣬ÏÈ˵ֻÓÃÓÚ±¾µØµ÷ÓõÄÇé¿ö£¬¶ÔÓÚ±¾µØµ÷Óã¬URLÖ»ÊÇÒ»¸ö±íʾ×é¼þµÄkey£¬Ã»ÓÐÆäËû×÷Óã¬ÕâÑù×öÓÐÈý¸öÎÊÌ⣺

  1. ÐèÒªÓиöµØ·½Áгö¸÷¸ö×é¼þÀïÓÐʲô URL ½Ó¿Ú¿É¹©µ÷Óá£Ä¢¹½½Ö×öÁ˸öºǫ́רÃŹÜÀí¡£
  2. ÿ¸ö×é¼þ¶¼ÐèÒª³õʼ»¯£¬ÄÚ´æÀïÐèÒª±£´æÒ»·Ý±í£¬×é¼þ¶àÁË»áÓÐÄÚ´æÎÊÌâ¡£
  3. ²ÎÊýµÄ¸ñʽ²»Ã÷È·£¬ÊǸöÁé»îµÄ dictionary£¬Ò²ÐèÒªÓиöµØ·½¿ÉÒÔ²é²ÎÊý¸ñʽ¡£

µÚ¶þµãû·¨½â¾ö£¬µÚÒ»µãºÍµÚÈýµã¿ÉÒÔ¸úÇ°ÃæÄǸö·½°¸Ò»Ñù£¬ÔÚ Mediator ÿ¸ö×é¼þ±©Â¶·½·¨µÄת½Ó¿Ú£¬È»ºóʹÓÃÆðÀ´¾Í¸úÇ°ÃæÄÇÖÖ·½Ê½Ò»ÑùÁË¡£

Å׿ªURL²»Ëµ£¬ÕâÖÖ·½°¸¸ú·½°¸1µÄ¹²Í¬Ë¼Â·¾ÍÊÇ£ºMediator ²»ÄÜÖ±½ÓÈ¥µ÷ÓÃ×é¼þµÄ·½·¨£¬ÒòΪÕâÑù»á²úÉúÒÀÀµ£¬ÄÇÎÒ¾ÍҪͨ¹ýÆäËû·½·¨È¥µ÷Óã¬Ò²¾ÍÊÇͨ¹ý ×Ö·û´®->·½·¨ µÄÓ³ÉäÈ¥µ÷Óá£runtime ½Ó¿ÚµÄ className + selectorName -> IMP ÊÇÒ»ÖÖ£¬×¢²á±íµÄ key -> block ÊÇÒ»ÖÖ£¬¶øÇ°Ò»ÖÖÊÇ OC ×Ô´øµÄÌØÐÔ£¬ºóÒ»ÖÖÐèÒªÄÚ´æÎ¬³ÖÒ»·Ý×¢²á±í£¬ÕâÊDz»±ØÒªµÄ¡£

ÏÖÔÚ˵»Ø URL£¬×é¼þ»¯ÊDz»Ó¦¸Ã¸ú URL ³¶ÉϹØÏµµÄ£¬ÒòΪ×é¼þ¶ÔÍâÌṩµÄ½Ó¿ÚÖ÷ÒªÊÇÄ£¿é¼ä´úÂë²ãÃæÉϵĵ÷Óã¬ÎÒÃÇÏȳÆÎª±¾µØµ÷Ó㬶ø URL Ö÷ÒªÓÃÓÚ APP ¼äͨÐÅ£¬¹ÃÇÒ³ÆÎªÔ¶³Ìµ÷Óᣰ´³£¹æË¼Â·ÕßÓ¦¸ÃÊǶÔÓÚÔ¶³Ìµ÷Óã¬ÔÙ¼Ó¸öÖмä²ãת·¢µ½±¾µØµ÷Óã¬ÈÃÕâÁ½Õß·Ö¿ª¡£ÄÇÕâÀïÕâÁ½Õß»ìÔÚÒ»ÆðÓÐʲôÎÊÌâÄØ£¿

Èç¹ûÊÇ URL µÄÐÎʽ£¬ÄÇ×é¼þ¶ÔÍâÌṩ½Ó¿Úʱ¾ÍҪͬʱ¿¼ÂDZ¾µØµ÷ÓúÍÔ¶³Ìµ÷ÓÃÁ½ÖÖÇé¿ö£¬¶øÔ¶³Ìµ÷ÓÃÓиöÏÞÖÆ£¬´«µÝµÄ²ÎÊýÀàÐÍÓÐÏÞÖÆ£¬Ö»ÄÜ´«Äܱ»×Ö·û´®»¯µÄÊý¾Ý£¬»òÕß˵ֻÄÜ´«Äܱ»×ª³É json µÄÊý¾Ý£¬Ïñ UIImage ÕâÀà¶ÔÏóÊDz»Ðеģ¬ËùÒÔÈç¹û×é¼þ½Ó¿ÚÒª¿¼ÂÇÔ¶³Ìµ÷Óã¬ÕâÀïµÄ²ÎÊý¾Í²»ÄÜÊÇÕâÀà·Ç³£¹æ¶ÔÏ󣬽ӿڵ͍Òå¾ÍÊÜÏÞÁË¡£

ÓÃÀíÂ۵ϰÀ´Ëµ¾ÍÊÇ£¬Ô¶³Ìµ÷ÓÃÊDZ¾µØµ÷ÓõÄ×Ó¼¯£¬ÕâÀï»ìÔÚÒ»Æðµ¼ÖÂ×é¼þÖ»ÄÜÌṩ×Ó¼¯¹¦ÄÜ£¬ÎÞ·¨ÌṩÏñ·½°¸1ÄÇÑùÌṩȫ¼¯¹¦ÄÜ¡£ËùÒÔÕâ¸ö·½°¸ÊÇÌìÉúÓÐȱÏݵ쬶ÔÓÚÒÅ©µÄÕⲿ·Ö¹¦ÄÜ£¬Ä¢¹½½ÖʹÓÃÁËÁíÒ»ÖÖ·½°¸²¹È«£¬Çë¿´·½°¸3¡£

·½°¸3

Ä¢¹½½ÖΪÁ˲¹È«±¾µØµ÷ÓõŦÄÜ£¬Îª×é¼þ¶à¼ÓÁËÁíÒ»ÖÖ·½°¸£¬¾ÍÊÇͨ¹ý protocol-class ×¢²á±íµÄ·½Ê½¡£Ê×ÏÈÓÐÒ»¸öеÄÖмä¼þ£º

//ProtocolMediator.m ÐÂÖмä¼þ
@implementation ProtocolMediator
@property (nonatomic, storng) NSMutableDictionary *protocolCache
- (void)registerProtocol:(Protocol *)proto forClass:(Class)cls {
NSMutableDictionary *protocolCache;
[protocolCache setObject:cls forKey:NSStringFromProtocol(proto)];
}
- (Class)classForProtocol:(Protocol *)proto {
return protocolCache[NSStringFromProtocol(proto)];
}
@end

È»ºóÓÐÒ»¸ö¹«¹²ProtocolÎļþ£¬¶¨ÒåÁËÿһ¸ö×é¼þ¶ÔÍâÌṩµÄ½Ó¿Ú£º

//ComponentProtocol.h
@protocol BookDetailComponentProtocol <NSObject>
- (UIViewController *)bookDetailController:(NSString *)bookId;
- (UIImage *)coverImageWithBookId:(NSString *)bookId;
@end
@protocol ReviewComponentProtocol <NSObject>
- (UIViewController *)ReviewController:(NSString *)bookId;
@end

ÔÙÔÚÄ£¿éÀïʵÏÖÕâЩ½Ó¿Ú£¬²¢ÔÚ³õʼ»¯Ê±µ÷Óà registerProtocol ×¢²á¡£

//BookDetailComponent ×é¼þ
#import "ProtocolMediator.h"
#import "ComponentProtocol.h"
#import "WRBookDetailViewController.h"
+ (void)initComponent
{
[[ProtocolMediator sharedInstance] registerProtocol:@protocol(BookDetailComponentProtocol) forClass:[self class];
}
- (UIViewController *)bookDetailController:(NSString *)bookId {
WRBookDetailViewController *detailVC = [[WRBookDetailViewController alloc] initWithBookId:param[@"bookId"]];
return detailVC;
}
- (UIImage *)coverImageWithBookId:(NSString *)bookId {
¡­.
}

×îºóµ÷ÓÃÕßͨ¹ý protocol ´Ó ProtocolMediator Äõ½ÌṩÕâЩ·½·¨µÄ Class£¬ÔÙ½øÐе÷Óãº

//WRReadingViewController.m µ÷ÓÃÕß
//ReadingViewController.m
#import "ProtocolMediator.h"
#import "ComponentProtocol.h"
+ (void)gotoDetail:(NSString *)bookId {
Class cls = [[ProtocolMediator sharedInstance] classForProtocol:BookDetailComponentProtocol];
id bookDetailComponent = [[cls alloc] init];
UIViewController *vc = [bookDetailComponent bookDetailController:bookId];
[[UIApplication sharedApplication].keyWindow.rootViewController.navigationController pushViewController:vc animated:YES];
}

ÕâÖÖ˼·ÓеãÈÆ£¬Õâ¸ö·½°¸¸ú¸Õ²ÅÁ½¸ö×î´óµÄ²»Í¬¾ÍÊÇ£¬Ëü²»ÊÇÖ±½Óͨ¹ý Mediator µ÷ÓÃ×é¼þ·½·¨£¬¶øÊÇͨ¹ý Mediator Äõ½×é¼þ¶ÔÏó£¬ÔÙ×ÔÐÐÈ¥µ÷ÓÃ×é¼þ·½·¨¡£

½á¹û¾ÍÊÇ×é¼þ·½·¨µÄµ÷ÓÃÊÇ·ÖÉ¢ÔÚ¸÷µØµÄ£¬Ã»ÓÐͳһµÄÈë¿Ú£¬Ò²¾Íû·¨×ö×é¼þ²»´æÔÚʱµÄͳһ´¦Àí¡£×é¼þ1µ÷ÓÃÁË×é¼þ2µÄ·½·¨£¬Èç¹ûÓÃÇ°ÃæÁ½ÖÖ·½Ê½£¬×é¼þ¼äÊÇûÓÐÒÀÀµµÄ£¬×é¼þ1+Mediator¿ÉÒÔµ¥¶À³éÀë³öÀ´£¬Ö»ÐèÒªÔÚMediatorÀï×öºÃµ÷ÓÃ×é¼þ2·½·¨Ê±µÄÒì³£´¦Àí¾ÍÐС£¶øÕâÖÖ·½·¨×é¼þ1¶Ô×é¼þ2µÄµ÷Ó÷ÖÉ¢ÔÚ¸÷¸öµØ·½£¬Ã»·¨×öÕâЩ´¦Àí£¬ÔÚ²»ÐÞ¸Ä×é¼þ1´úÂëµÄÇé¿öÏ£¬×é¼þ1ºÍ×é¼þ2ÊÇ·Ö²»¿ªµÄ¡£

µ±È»ÄãÒ²¿ÉÒÔÔÚÕâÉÏÃæ¸ú·½°¸1Ò»ÑùÔÚ Mediator ¶Ôÿһ¸ö×é¼þ½Ó¿Ú wrapper Ò»²ã£¬ÄÇÕâÑùÕâÖÖ·½°¸¸ú·½°¸1±È³ýÁ˸ü¸´Ôӵ㣬ÆäËûÃ»Ê²Ã´Çø±ð¡£

ÔÚ protocol-class Õâ¸ö·½°¸ÉÏ£¬Ö÷Òª´æÔÚµÄÎÊÌâ¾ÍÊÇ·ÖÉ¢µ÷Óõ¼ÖÂñîºÏ£¬ÁíÍâʵÏÖÉÏ»áÓÐÒ»Ð©ÈÆ£¬ÆäËû¾ÍûʲôÁË¡£casa ˵µÄ ¡°protocol¶ÔÒµÎñ²úÉúÁËÇÖÈ룬ÇÒ²»·ûºÏºÚºÐÄ£ÐÍ¡£¡± Æäʵ²¢Ã»ÓÐÕâô¿äÕÅ£¬Êµ¼ÊÉÏ protocol ¶ÔÍâÌṩ×é¼þ·½·¨£¬¸ú·½°¸1ÔÚ Mediator wrapper ¶ÔÍâÌṩ×é¼þ·½·¨ÊDz¶àµÄ¡£

×îºó

Ä¢¹½½ÖÔÚÒ»¸öÏîÄ¿ÀïͬʱÓÃÁË·½°¸2ºÍ·½°¸3Á½ÖÖ·½Ê½£¬»áÈÃд×é¼þµÄÈ˲»ÖªËù´ë£¬ÐÂÔöÒ»¸ö½Ó¿Úʱ²»ÖªµÀ¸ÃÓ÷½°¸2µÄ·½Ê½»¹ÊÇ·½°¸3µÄ·½Ê½£¬¿ÉÄÜÕâ¸öÔÚÄ¢¹½½ÖÄÚ²¿»áͨ¹ýһЩÎĵµ¹æÔòÈ¥¹æ·¶£¬µ«ÆäʵÊÇûÓбØÒªµÄ¡£¿ÉÄÜÊÇÄ¢¹½½Ö×÷ΪµçÉÌÆ½Ì¨Ò»¿ªÊ¼¾Í×¢ÖØAPPÒ³Ãæ¼äÌø×ªµÄ¸ÅÄÿ¸öÄ£¿éÒѾ­ÓÐÒ»¸ö¶ÔÓ¦µÄURL£¬ÓÚÊÇ×é¼þ»¯Ê±×ÔÈ»Ï뵽ͨ¹ýURLµÄ·½Ê½±íʾ×é¼þ£¬ºóÐø·¢ÏÖURL·½Ê½µÄÏÞÖÆ£¬ÓÚÊǼÓÉÏ·½°¸3µÄ·½Ê½£¬ÕâÒ²ÊÇÕý³£µÄ̽Ë÷¹ý³Ì¡£

ÉÏÃæÂÛÊöÏ·½°¸1ȷʵ±È·½°¸2+·½°¸3¼òµ¥Ã÷ÁË£¬Ã»ÓÐ ×¢²á±í³£×¤ÄÚ´æ/²ÎÊý´«µÝÏÞÖÆ/µ÷Ó÷ÖÉ¢ ÕâЩȱµã£¬·½°¸1¶à×öµÄÒ»²½ÊÇÐèÒª¶ÔËùÓÐ×é¼þ·½·¨½øÐÐÒ»²ã wrapper£¬µ«ÈôÏëÒªÃ÷È·Ìṩ×é¼þµÄ·½·¨ºÍ²ÎÊýÀàÐÍ£¬½âñîͳһ´¦Àí£¬·½°¸2ºÍ·½°¸3ͬÑùÐèÒª¶à¼ÓÕâ²ã¡£

ʵ¼ÊÉÏÎÒûÓÐ×é¼þ»¯Ïà¹ØµÄʵ¼ù£¬ÕâÀï½ö´Ó limboy ºÍ casa ÌṩµÄÕ⼸¸ö·½°¸¶Ô±È·ÖÎö£¬ÎÒ»¹¶Ô×é¼þ»¯´øÀ´µÄÊÕÒæÊÇ·ñ´óÓÚ×é¼þ»¯Ôö¼ÓµÄ³É±¾Õâµã´æÒÉ£¬ÏàÐÅÕæÕýʵ¼ùÆðÀ´»¹»áÅöµ½ºÜ¶à¿Ó£¬¼ÌÐøÌ½Ë÷ÖС£

   
2552 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì