工厂模式

原创 2015年11月18日 03:46:53

工厂模式是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注册的方式
  • 目前工厂采用单例,提供抽象支付实例方法采用类方法(对上面代码稍作修改即可)
  • 大部分支付逻辑都模块化处理,在调用支付实例时,此实例被所在页面控制器所持有,而不可作为局部实例来使用,为了防止银联实例进行代理操作时提前释放导致崩溃
版权声明:本文为博主学习心得所写文章,不设版权,欢迎转载。

相关文章推荐

MVC工厂模式。

  • 2017-09-27 17:47
  • 21.94MB
  • 下载

c++ java 抽象工厂模式代码

  • 2016-12-31 19:20
  • 417KB
  • 下载

抽象工厂模式

``` // 抽象工厂模式 // 有多个抽象子产品接口,每个抽象子产品接口都可以扩展多个具体子产品类的实现 // 一个抽象工厂接口,可以扩展多个具体工厂类的实现,且每个具体工厂类能够创建多个具体子产品...

Java工厂模式的例子

  • 2017-01-14 13:47
  • 14KB
  • 下载

简单工厂模式--Java

简单工厂模式:由一个叫做工厂类的东西决定生产什么样的实例,你只要传递一个信息给工厂类,工厂类就知道应该生产什么样的产品。 工厂:生产具体产品的东西 产品:继承了一个基类或者接口,这个接口或基类抽象...

c++工厂模式

  • 2016-08-13 15:33
  • 9.60MB
  • 下载

工厂模式设计

  • 2016-05-26 17:23
  • 11KB
  • 下载

工厂模式三层

第一次接触工厂模式是在我最近开发的一个项目中,由于项目需求远超出预想,再加上去研究新技术,所以根本没有时间去琢磨项目开发中所用的框架。项目刚告一段落,花了点时间将项目的框架研究了下,以下我就说说自己的...

工厂模式简介和实例代码

  • 2016-11-17 17:58
  • 3.87MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)