本文的靈感來自http://blog.sunnyxx.com/2015/12/19/self-manager-pattern-in-ios/
這種模式的意義就是自己的事情自己做完,不要去給別人添麻煩,讓你的功能純粹點。
舉個栗子:你要實現一個分享功能。可能你很多地方都需要分享,那你不可能每個地方都去寫一遍對不對,所以這時候你需要把分享功能抽離出來對不對,讓它純粹。
+ (void)wxShareWithImages:(NSArray *)images shareTitle:(NSString *)shareTitle shareContent:(NSString *)shareContent shareURLString:(NSString *)shareURLString response:(KZWResponseCallback)response;
你只要單獨出來一個shareservice這樣你不管在哪分享只要調用這個方法就可以了什么都不用管。然后你就可以發現你可以把你app的很多服務抽出來,減少冗余代碼。純粹!
在舉個栗子就是作者原文的栗子,為什么我要舉相同的栗子呢,因為我還有話說:微博的頭像到處都有,都需要點擊頭像跳轉個人中心,以及包括頭像的各種大v特效等。
代碼是這樣的:
- (void)selfManagedConfigureWithAvatarURL:(NSURL *)URL VIPInfo:(id)info UID:(NSString *)UID {
[self configureWithAvatarURL:URL VIPInfo:info tapped:^{
// 假設 App 結構是 Root -> TabBar -> Navigation -> ViewController
UITabBarController *tabBarControler = (id)[UIApplication.sharedApplication.delegate.window.rootViewController;
UINavigationController *navigationController = tabBarControler.selectedViewController;
// 創建用戶信息 View Controller
FDUserProfileViewController *profileViewController = [FDUserProfileViewController viewControllerWithUID:UID];
[navigationController pushViewController:profileViewController animated:YES];
}];
}
大家會發現一個問題,跳轉寫在view里了。
大家都知道跳轉的方法需要調用controller,在view里是沒有的,需要去聲明很不方便對不對,這時候你就需要router,各種跳隨便跳,哈哈哈。讓你的self-mannage更純粹。
最后舉個栗子:大家的app里都有很多webview對不對,是不是一個webview聲明了一個controller。其實不需要,只需要一個controller,把url傳進去就重新打開一個webview就不需要那么多controller了,然后我們可以在里面把router應用進去。這樣你就可以做到,webview的導航欄,是否需要返回,是否需要titler,是否需要傳完整的url還是只需要傳path,以及測試還是線上環境等都成為可配。這樣是不是很爽,哈哈哈。讓你的self-mannage更純粹。
我這里也只是對這種設計模式的一個擴展,拋磚引玉一下,希望你也能爽。