本文的灵感来自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更纯粹。
我这里也只是对这种设计模式的一个扩展,抛砖引玉一下,希望你也能爽。