美文网首页
设计模式-工厂模式-抽象工厂模式

设计模式-工厂模式-抽象工厂模式

作者: 我静静仰望着天空 | 来源:发表于2018-10-09 16:16 被阅读60次

接着

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

继续剖析

1、抽象工厂角色划分?

        特点->比工厂方法产品种类多

        地图案例?

                模块:地图MapView模块、定位模块、导航模块、搜索模块…

        工厂方法模式:只有1条流水线

                创建MapView(产品)

        抽象工厂模式:至少2条流水线

                创建MapView(产品)

                多个产品->多个抽象产品

                MapView->抽象->MapViewProtocol

                MapLocation->抽象->MapLocationProtocol

                MapNavigation->抽象->MapNavigationProtocol

                ……

        简单工厂->抽象->工厂方法(抽象单个产品)->抽象(抽象多个产品)->抽象工厂

        分析角色?

            角色一:抽象产品A->MapViewProtocol

            角色二:抽象产品B->MapLocationProtocol

                …

            角色三:具体产品A1->BaiduMapView

            角色四:具体产品A2->GaodeMapView

                …

            角色五:具体产品B1->BaiduMapLocation

            角色六:具体产品B2->GaodeMapLocation

            …

            角色七:抽象工厂->MapFactoryProtocol

            角色八:具体工厂A->BaiduMapFactory

            角色九:具体工厂B->GaodeMapFactory

2、工厂方法模式->具体实现代码显示一把?

        百度地图

        地图模块+ 定位模块,导航、搜索…你自己去实现

加载

我们要把这些代码抽象,抽象到工厂里

之前是

现在

同步一下高德地图

base工厂也要修改(新增) 地图初始化工作完成了

我把控制器里创建的 BMKMapView* mapView = [[BMKMapView alloc]initWithFrame:self.view.bounds];

放到

viewController创建对象修改

3、抽象工厂模式->具体实现代码?

        实现->扩展一个产品(抽象产品)

        定位为案例说明

        第一步:分析定位特点?

            百度地图->定位

                    图层设置->歧义?

                    mapView.showsUserLocation = YES;

            高德地图->定位

                    mapView.isShowsUserLocation = true

        第二步:在我们的MapView中需要定义一个定位图层属性

       第三步:定义MapLocationProtocol

            标准很关键

共性问题

            1、共性问题(两个地图共同特点在哪里?)->最核心技术

                    百度地图->BMKLocationService

                    创建BaiduMapLocation类,并引入MapLocationProtocol抽象产品类

                    定义回调->BMKLocationServiceDelegate 定位结果

                   处理回调->MapLocationDelegateProtocol

                            创建MapLocationDelegateProtocol类,地图的回调

                高德地图->

                 shardSDK、友盟…?(继承各种分享组件)

                关联性在哪里?

                 需要哪个你就导入哪个?没有定位图层

//         2、差异问题(两个地图差异特点在哪里?)

    第四步:在工厂中配置产品类(抽象产品类)?

              抽象工厂中定义

            创建BaiduMapLocation类,具体产品

       第五步:定义MapLocationProtocol逻辑?->抽象产品角色

                所有地图中

               必然存在:启动定位(startLocation)、停止定位(stopLocatioin)、定位信息回调

        第六步:具体实现->地图产品实现

                百度实现

                高德实现

            分析一下角色划分?

                角色一:抽象产品A->MapViewProtocol

                角色二:抽象产品B->MapLocationProtocol

                    …

                角色三:具体产品A1->BaiduMapView

                角色四:具体产品A2->GaodeMapView

                    …

                角色五:具体产品B1->BaiduMapLocation

                角色六:具体产品B2->GaodeMapLocation

                …            

                角色七:抽象工厂->MapFactoryProtocol

                角色八:具体工厂A->BaiduMapFactory

                角色九:具体工厂B->GaodeMapFactory

        第七步:具体实现->工厂实现

高德也同理

当我的引擎发生切换的时候,我的客户端代码,不需要有任何修改,因为都是面向协议的...

            分析后:找他的共性问题比较麻烦,找不到(麻烦过程给大家演示,我原来我在写框架时候,我是一个什么状态)

            Navigation也是如此(很麻烦,痛苦)

            框架建立前期很痛苦

            自己平时很少写框架(写框架),模糊很正常,多看几遍理解了

      第八步:实现具体类->处理回调

            1、百度实现类?

MapLocationDelegateProtocol

        注意事项:地图返回类型(数据类型->独立类型)

                独立定义这个了类

                当定位发生错误时,会调用代理的此方法。

                连续定位回调函数。

                定位权限状态改变时回调函数

                BMKLocation *location

                封装了->CLLocation(系统自带)

        2、定义BMKLocation协议->定位信息实现类->不能返回客户端

            高德地图也是如此->一样

            注意:系统自带我们是可以返回,SDK不行

       3、实现百度地图->定位数据->BaiduLocation

            创建BaiduLocation类

            抽象类中->不实现->声明(子类抽象功能到父类)

            OC里面抽象类,在其他语言就不是了

            在这里百度地图:BMKUserLocation、BMKLocation(扩知道)->没有太大区别->官方网址区别

            之前地图:习惯BMKUserLocation

        4、定义MapLocationDelegateProtocol规范(标准)

                回调方法

把它拷贝到下图里的代码

总结:本堂课思路

绕晕了

1、分析定位特点->MapView定位基本属性(最基本定义)

2、定义了属性->在我们的MapView里面

3、定义抽象产品->MapLocationProtocol

4、抽象工厂中定义

5、分析MapLocationProtocol规范(回调)?

6、实现了我们的具体产品->地图产品实现

百度定位->BaiduMapLocation

7、在我们的具体工厂里面实现了

GaodeMapFactory

BaiduMapFactory

实现了:-(id<MapLocationProtocol>)getMaplocation

8、具体的BaiduMapLocation实现

8.1 分析了MapLocationDelegateProtocol需要数据(回调数据)

BMKLocation *location

8.2 定义BMKLocation协议->定位信息实现类->不能返回客户端

8.3 实现百度地图->定位数据->BaiduLocation

8.4 定义MapLocationDelegateProtocol规范(标准)->实现了

相关文章

  • 常用设计模式

    设计模式 工厂模式 工厂模式思路上分:简单工厂模式,工厂模式, 抽象工厂模式// 抽象工厂模式可以代替工厂模式,做...

  • 设计模式四、抽象工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 抽象工厂模式 ...

  • Android 源码设计模式解析与实战 读书笔记 6 抽象工厂模

    创建型设计模式 —— 抽象工厂模式 1. 抽象工厂模式介绍 抽象工厂模式(Abstract Factory Pat...

  • 单件设计模式

    一、定义 设计模式 设计模式就是一种更好的编写代码方案。 常见设计模式 工厂设计模式、抽象工厂设计模式、抽象工厂设...

  • 设计模式系列-抽象工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 抽象工厂模式 抽象工厂模式 定义 抽象工...

  • 工厂模式

    工厂模式 就是工厂---生产-->产品 在设计模式中,分为 简单工厂模式, 工厂方法模式,抽象工厂模式. 工厂模式...

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

  • 设计模式三、工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 工厂模式 在一...

  • Go语言设计模式(3)抽象工厂模式

    Go语言设计模式(3)抽象工厂模式 抽象工厂模式的定义 抽象工厂模式的定义如下: Provide an inter...

  • 创建型设计模式

    一 . 工厂模式 二. 抽象工厂设计模式

网友评论

      本文标题:设计模式-工厂模式-抽象工厂模式

      本文链接:https://www.haomeiwen.com/subject/ocvdaftx.html