iOS功能模块工厂化

在所有的面向对象语言中,许多类型的对象创建需要一些列步骤,你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象.在这些情况,新建对象的过程就是一个工厂.

Person.h
Person.m

这也是一个简单工厂,我们只需要创建一个Person对象,而不用管它的创建过程.
可以说在一个app开发过程中,我们一直在用各式各样的工厂,只不过这些工厂所生产的都是一些小零件,还需要进一步加工才能成为才能变成可用的商品.
那么今天来讲讲功能模块的工厂化.由于移动设备的限制以及扁平化的普及,单个功能模块的功能会变得相对单一,如果依然多变,我们也可以把一个多变的模块切割成数个功能单一的模块.例如,医院里预约挂号就可以分为选择医生和选择医生号源两个流程.既然提到了预约挂号,那就以预约挂号为例子.
将种树流程细分下来如下:

预约挂号流程

其中


选择医生流程

为选择医生流程

选择号源流程

为选择号源流程.
正常流程下,我们会依次建立5个viewController,然后依次push,到最后输出号源.功能模块工厂化后则变为:
选择医生流程功能--输入:开始--->输出:医生;
选择号源流程功能--输入:医生--->输出:号源.
既然有了工厂流水线,那么就需要有一个管理员(manger)来接受输入得到结果后输出结果.管理员也要得到每个界面的管理权限,就是将viewController的代理设置为manager.根据管理风格也可以分为三种:

  • 链式传递.将第一个viewController代理设为manager,然后一次将后一个viewController的代理设置为前一个viewController,由viewController内部做push操作.在得到结果后,在通过一层层的代理将值返回给manager.
  • 折叠传递.将流程内的所有viewController的代理设置为manager,由manager处理push操作.得到结果后将值传给manager
  • 混合传递.也就是将链式传递和折叠传递混合使用.

manager还需要需要几个基本要点:1,能够记录起点位置;2在流程期间manager不能被销毁.

Paste_Image.png

使用时先创建manager的子类

DoctorManager.h
DoctorManager.m

这样的话,整个选医院流程就可以通过manager子类来调用自己的方法

if (!_doctorManager)
{
    _doctorManager = [[DoctorManager alloc]init];
}
[_doctorManager selectDoctorWithStartViewController:self
                                  doctorSelectBlock:^(Doctor *doctor) {
    //拿到医生之后的操作
}];

同样的选号流程也可以做出一样的处理,那么整个预约流程就完全可以用以下代码来代替

if (!_doctorManager)
{
    _doctorManager = [[DoctorManager alloc]init];
}
[_doctorManager selectDoctorWithStartViewController:self
                                  doctorSelectBlock:^(Doctor *doctor)
{
    //拿到医生之后的操作 ->进入选号流程->申请单
    if (!_enterAppoint)
    {
        _enterAppoint = [[EmterApointManager alloc]init];
    }
    [_enterAppoint enterApoint];
    
}];

}
那么以后app项目中,不管是在哪个地方需要调用预约,只需要这段代码就搞定.
(未完待续...)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 10,679评论 1 23
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,050评论 25 709
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,397评论 30 472
  • 现在的我还有什么可想的?这么好的人还有的找吗?挺畅快并且些许痛心,应该是这样吧…… 对不起,那个总是无...
    咯佳阅读 2,934评论 3 2
  • 我最早接触这本书还是从我的老师口中所了解,当时听的一知半解,后来,我又在与同学的聊天中谈论到它,甚至,我在书店里...
    似羽流年阅读 8,895评论 2 1

友情链接更多精彩内容