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

接着

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

继续剖析

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解析(需求)

代码是可配置的

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,590评论 18 139
  • "顶大、定得各顶大顶顶大",妈妈手机里传出清脆的快板声,我如痴如醉的听着这欢快的节奏,就不由得站起来用手比划...
    小水滴浩源阅读 119评论 0 0
  • 距离高考286天,理想状态应该是头悬梁,锥刺股,锁电脑关手机进入题的海洋。 理想很丰满,现实很骨感。放假前想着减肥...
    发呆半生阅读 299评论 1 0
  • 又到了正月十二,前晚早早地睡了,就是为了昨天早早地起来。 和正月初八那天一样,九点半出门,一路上既兴奋又期待,明明...
    Carrie蝴蝶泉边阅读 221评论 2 5
  • 陆向谦教授在耿丹学院建立的互联网创新创业实验室项目,基本情况,已经取得的成果,主要的内容,请大家看实验室的项目概要...
    敷衍_5d23阅读 171评论 0 0