设计模式-工厂模式-开发案列-工厂实现

接着

设计模式-工厂模式-原理剖析

继续剖析

1.工厂方法模式->开发案例? 地图案例举例子?

        工厂目的:用于创建对象的?(工厂只负责创建对象,生宝宝,不处理业务逻辑)

        分析需求:在我们的开发当中,场景,很多时候开发地图、分享功能、支付功能…?

        发现问题:当我们的需求变更的时候,你会发现我们项目迭代很麻烦?

        例如:早上我的项目用百度地图、下午我用高德地图?

早上用的是支付宝、下午用的是微信?修改代码的时候就麻烦了,你需要不断的去修改客户端的代码,由于你不短的修改,导致维护的成            本在增加?也就意味着我的开发周期和效率降低了,非公司带来的损失也就越大。由于越大也就导致了你的价值的体现。

         解决方案:优化代码(项目重构)?

                            采用工厂方法模式?

                                    动态切换地图(一键切换)

                                    最少量的代码,切换强大功能

        实现代码:定义每一个类?

                    1、分析角色?->方法

            角色一:抽象产品->地图规范?

                        MapViewProtocol    

                        百度地图:BMKMapView?

                        BMKMapView : UIView

                        高德地图:MAMapView?

                        MAMapView : UIView

                  结论:

                        1、所有的地图MapView都是UIView子类

                        2、所有的地图MapView都有类型

                             地图类型、地图语言、是否支持平移....

 地图类型、地图语言、是否支持平移


                           共性问题、差异问题,先解决共性问题,再解决差异问题

定义一个协议

BaiduMapView

角色一:抽象产品->地图规范?


                角色二:具体产品->具体地图

                        例如:百度地图、高德地图…

                            百度地图->BaiduMapView

                            高德地图->GaodeMapView


创建BaiduMapView类

高的地图同理,创建.

具体百度地图,创建地图的大小(高德同理)

           角色三:抽象工厂->生成地图

                    具体是什么工厂->地图标准

                     MapFactoryProtocol


        角色四:具体工厂->具体地图

            例如:百度工厂、高德工厂…

            BaiduMapFactory、GaodeMapFactory



run run run .... 面向协议编程,暴露给客户端的,全是协议

不需要改太多代码,就能实现切换.

还不完善,如下:

        动态切换?发现问题:还是需要修改客户端的代码?

        达到目的:不修改客户端代码就能够达到要求?

        解决方案:

1、用plist文件配置?->iOS自带的配置文件(特殊有规范的xml文件)

2、用xml配置文件(自定义xml文件)

3、用json文件配置

4、宏定义也行

        如何实现?

        确定方案:用xml配置文件(自定义xml文件)

        1、分析文件结构?

                加载地图需要哪些参数?

                    1、第一个规范

                            百度地图->key

                            高德地图->key

                            这个key就是公共属性(标签)

                    2、第二个规范

                                key->对应地图->对应工厂

                                baidu->key->BaiduMapFactory

                                geode->key->GaodeMapFactory

                               工厂属性:factory = "BaiduMapFactory"

                      3、第三个规范->需要编号

                                    id = 1,id = 2

                      4、第四个规范

                                百度地图、高德地图、google地图…加载哪一个?

                                开关按钮(控制加载哪一个地图)

                                isOpen = "YES"

                                如果用户所有的地图都设置了"YES",默认启用第一个地图

       2、实现代码?->简单工厂模式


创建xml文件Empty

这种配置打包包里,别人是可以看到的,当然也可以加密的.把它变成plist文件.然后加密

        首先:定义Model

首先:定义Model


 其次:实现解析类


实现解析类

         最后:简单工厂模式来了

                    角色一:具体工厂 (一个类)

                    地图引擎->MapEngine


                    作用:动态创建工厂(动态管理工厂)


只需要修改xml里的yes/no


解决客户端修改代码的问题

角色二:具体产品(类多了)

也可以通过服务器配置,返回xml解析(需求)

代码是可配置的

你可能感兴趣的:(设计模式-工厂模式-开发案列-工厂实现)