fireflyLogin网络工具设计模式——类工厂(学习笔记)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fireflyLogin网络工具设计模式——类工厂(学习笔记)相关的知识,希望对你有一定的参考价值。

一、RequestKeyID(业务id)

二、FireflyRequestHelper(对外提供初始化接口,提供网络回调代理方法,供FireflySafeLoginHelper使用,内部管理着网络请求的实现)

/**
 *  网络请求模块封装对象
 *
 *  @param requestKey key值用于生成最终的业务访问URL和一些特殊的参数
 *  @param delegate   指向请求网络的业务模块
 *
 *  @return 网络请求模块封装对象
 */
- (id)initWithKey:(RequestKeyID)requestKey delegate:(id <FireflyRequestHelperDelegate>)delegate;

添加代理:

-(void)requestSuccess:(RequestKeyID)requestKey result:(NSObject*)requset;

 

三、FireflySafeLoginResult(请求回调处理对象,包括回调结果/错误吗/错误详情)

+ (instancetype)getResult:(FireflySafeLoginResultStatus)result
            withErrorCode:(NSString *)errorCode
             withErrorMsg:(NSString *)errorMsg
{
    FireflySafeLoginResult *ret = [[FireflySafeLoginResult alloc] init];
    ret.result = result;
    ret.errorCode = errorCode;
    ret.errorMsg = errorMsg;
    return ret;
}

errorCode管理着当前的错误吗,errorMsg管理着错误详情。

四、FireflySafeLoginHelper(对外提供业务层接口,供业务层调用,其中包括登录/短信验证/插件下载。。。)

提供了回调接口供外部使用:

/**
 *  回调接口
 *
 *  @param requestKey 网络请求类型
 *  @param requset    登录结果字典
 */
-(void)getResult:(RequestKeyID)requestKey
         result:(FireflySafeLoginResult* )requset;

 

FireflySafeLoginHelper提供单例来管理业务操作:分别为每个业务初始化FireflyRequestHelper请求对象,传入业务id,传入代理,FireflyRequestHelper通过当前的业务id分别进行对应的义务处理,例如分别定制不同的请求参数以及请求url。

例如源码:

- (NSString *)requestBodyStringWithKey:(RequestKeyID)requestKey httpbody:(id)httpBoby
{
    NSDictionary *httpHeader = [self requestHttpHeaderWithKey:requestKey];
    NSDictionary *headerDict = [[NSDictionary alloc] init];
    if (httpBoby !=nil) {
        headerDict = @{@"header":httpHeader,
                       @"body":httpBoby,
                       };
    }
    else
    {
        headerDict = @{@"header":httpHeader,
                       };
    }
    
    NSDictionary *requestDict = @{@"request":headerDict};
    NSString *bodyString = [[NSString alloc] initWithData:[requestDict toJSON]
                                                 encoding:NSUTF8StringEncoding];
    return bodyString;
}

- (NSDictionary *)requestHttpHeaderWithKey:(RequestKeyID)requestKey
{
    if (requestKey)
    {
        NSMutableDictionary *headerDict = [[FireflyWebService sharedInstance] getDefaultHttpHeader];
        
        NSString *transId = [self.trandIdDict objectForKey:[NSNumber numberWithInteger:requestKey]];
        [headerDict setObject:transId forKey:@"transId"];
        NSLog(@"scapTransId:%@",transId);
        
        //防止重放攻击
        NSString *time = [FireflyDateUtil dateTimeString];
        if ([FireflyGlobalVar sharedInstance].isSequenceNeedDencry)
        {
            NSString *sequence = [FireflySecurityUtil aesEncrypt:time
                                                             key:[FireflyGlobalVar sharedInstance].aesToken
                                                          vector:AES_VECTOR];
            [headerDict setObject:sequence forKey:@"reqSeq"];
        }
        else
        {
            [headerDict setObject:@"0" forKey:@"reqSeq"];
        }
        
        //需要根据不同的业务类型向headerDict 中添加内容
        switch (requestKey)
        {
            case Firefly_DYNAMIC_MENU:
                /**
                 *  动态的向 headerDict 中添加内容
                 */
                break;
                
            default:
                break;
        }
        return headerDict;
    }
    return nil;
}

同时FireflySafeLoginHelper还管理着FireflySafeLoginResult用以处理FireflyRequestHelper请求拿到的回调(当然FireflySafeLoginHelper要遵循FireflyRequestHelper的代理了),通过业务id进行回调的处理。对每一种情况分别进行处理,初始化FireflySafeLoginResult对象,将结果对象和当前业务id回调给业务层使用。

五、手绘了个流程图,丑

技术分享

 

以上是关于fireflyLogin网络工具设计模式——类工厂(学习笔记)的主要内容,如果未能解决你的问题,请参考以下文章

设计模式-抽象工厂模式

设计模式-简单工厂

abstract Factory pattern

三种工厂模式

(转)抽象工厂_笔记

抽象工厂模式