设为首页 加入收藏

TOP

iOS 微信、支付宝、银联支付组件的进一步设计(二)
2023-07-23 13:25:26 】 浏览:72
Tags:iOS 微信 支付宝 支付组 步设计
yType { if (![self containsPrepayDataStrategyWithPayType:payType]) { return nil; } NSString *payTypeKey = [Utils convertPayTypeToString:payType]; //将枚举转成字符串 Class cls = self.strategyMap[payTypeKey]; return [[cls alloc] init]; //在需要时才返回创建的对象 } //懒加载,需要时创建 - (NSMutableDictionary *)strategyMap { if (!_strategyMap) { _strategyMap = @{}.mutableCopy; } return _strategyMap; } @end

通过上面的支付配置(单例)对象,我们将以支付类型为key, 以对应的获取预支付信息的类为value, 使用字典来管理。 将配置类设计成单例,这样就可以在支付组件中访问,并使用其中的配置信息。

支付组件的伪代码:

#import "PayConfig.h"

@interface PayManager :NSObject 

//调用预支付信息API接口,用到的请求参数
@property (nonatomic,strong) NSDictionary *requestParams;

//支付第三方类型
@property (nonatomic,assign) PayType payType;

//开始支付
- (void)startPay;
@end


@implementation PayManager 


//开始支付
- (void)startPay {
    
    //1. 根据支付类型,判断支付配置中是否有需要请求服务API的处理类
    if ([[PayConfig config] containsPrepayDataStrategyWithPayType:self.payType]) {
        id strategy = [[PayConfig config] getPrepayDataStrategyWithPayType:self.payType];
        
        //利用KVC向请求API接口的策略类传递请求参数
        [strategy setValue:self.requestParams forKey:@“requestParams”];
        
        //准备好请求数据后,开始调用接口API获取所需要的预支付信息
        [strategy getPayData:^(id result, NSError *error ) {
            //拿到需要的预支付信息后,再调起第三方支付组件
            
        }];
    
    }else {
        // 调起第三方支付组件
    }

}
@end

总结

通过我们的进一步设计,支付组件已完全不依赖于网络组件来完成对预支付信息的获取,而且扩展性更强了。 如果以后有新的支付第三方加入进来,且需要获取预支付信息的, 我们只需要实现PayDataPrepareProtocol 协议, 并将其加入到 PayConfig 中就可以了。 通过少量的修改我们就可以完成扩展,也遵循了“开闭原则( 对扩展开放,对修改关闭)” 。

完整的支付组件代码请前往:RZPayManager
在README.md文件中有该组件的使用详解,如果喜欢,点关注支持一下。

后记

如果本文对你有一点帮助的话,欢迎收藏、点赞,感谢。文中如有不对之处,也欢迎大家在评论区指出,共勉。

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇盘点| 有哪些比较新的好用的React.. 下一篇xcode历史版本下载

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目