工厂模式

工厂模式是iOS开发中最常用的模式,以下讲的是最简单实现的一种工厂模式,当然还有很多变种工厂模式,后续再上,最近学习设计模式后有所心得。
工厂模式

需求

  • 现在需要集成支付第三方,有支付宝,微信,palpay,银联等。
  • 只通过一个方法来获取具体支付实例,且生成逻辑是不变的
  • 具体支付实例被当作抽象支付类使用,即不关心具体支付类,能与具体支付类解耦合
  • 当增减第三方支付时,应用端的代码无需多少变动

定义

工厂模式是通过工厂提供抽象产品实例而非直接对具体产品实例化。

这里写图片描述

这就是带参数的工厂模式。
缺点就是增减产品时,工厂类需要修改,违反了类的open-close原则。但是相比只通过一个单例传参并获取对应支付方法来说,更模块化,更易维护。

若想增减产品但又不修改工厂类方法,可以采用注册类的方式,有点像tableview注册cell的类方法,这样相应的把工厂生成产品的方法逻辑修改一下即可。

-(PTXProduct*)createProductWithParamId:(NSString *)paramId
{
    NSString *className = [registedDict valueForKey:param];
    if (!className) {
        return nil;
    }
   Class productClass = NSClassFromString(className);
    return [[productClass alloc] init];
}

-(void)registerParamId:(NSString *)paramId productClass:(Class)productClass
{
    if (!registedDict) {
        registedDict = [NSMutableDictionary dictionary];
    }
    [registedDict setValue:NSStringFromClass(productClass) forKey:paramId];
}

项目问题归结

  • 由于第三方支付系统存在注册分歧,只有微信SDK需要注册且分享与支付共用一个注册代理,其他支付宝和银联无此需要。目前集成过程中预留了抽象支付类注册方法,但是仍然采用外部appDelegate注册的方式
  • 目前工厂采用单例,提供抽象支付实例方法采用类方法(对上面代码稍作修改即可)
  • 大部分支付逻辑都模块化处理,在调用支付实例时,此实例被所在页面控制器所持有,而不可作为局部实例来使用,为了防止银联实例进行代理操作时提前释放导致崩溃
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值