当前位置: 首页 > news >正文

iOS工厂模式

iOS工厂模式

文章目录

  • iOS工厂模式
    • 简单工厂模式(Simple Factory)
    • 工厂方法模式(Factory Method)
    • 抽象工厂模式(Abstract Factory)
    • 三种模式对比

简单工厂模式(Simple Factory)

定义:通过一个工厂类集中管理所有对象的创建,客户端通过传入参数指定所需产品类型。

工厂类通常包含一个静态方法(类方法),由该方法根据输入类型负责创建具体的产品(对象)。

简单的拿我项目之中内容来举例,我在地图之中标点有乡村景点和民俗之分,不同位置对应的标点显示图片不同,于是就分为不同的标点,于是我为BJAnnotation写了一个类方法

typedef enum BJAnnotationType {BJAnnotationTypeScenery = 0,BJAnnotationTypeLiving = 1
} BJAnnotationType;+(BJyAnnotation *)AnnotationWithType:(BJAnnotationType)type {switch (type) {case BJAnnotationTypeScenery:BJSceneryAnnotation *annotation = [[BJSceneryAnnotation alloc] init];return annotation;case BJAnnotationTypeLiving:BJLivingAnnotation *annotation = [[BJLivingAnnotation alloc] init];return annotation;default:return nil;}
}

其实说白了就是根据不同的情况生成了不同的类,我们可以获取所需要的对象,而不需要知道其创建细节,一定程度上减少系统的耦合

工厂方法模式(Factory Method)

定义:将对象的创建延迟到子类,每个具体工厂负责一个具体产品的实例化。

  1. 抽象工厂接口:声明创建产品的抽象方法(如 sellPhone方法)
  2. 具体工厂类:实现接口,返回特定产品实例(如 XiaomiFactory 创建小米手机)
  3. 产品继承体系:与简单工厂模式类似,但工厂与产品一一对应

在OC之中,我们其实可以使用协议来实现一个工厂类的抽象方法,类似内容如下

@protocol PhoneMakeProtocol <NSObject>+ (phone *)sellPhone; // 这个phone可以作为抽象类(小米,苹果手机都继承于他)@end

建立一个具体的工厂类

 @interface iPhoneFactory : NSObject <PhoneMakeProtocol>@end@implementation iPhoneFactory- (phone *)sellPhone {return [[iPhone alloc] init];}@end

抽象工厂模式(Abstract Factory)

定义:创建一组相关或依赖对象的家族(产品族),确保产品之间的兼容性。

工厂模式是创建型设计模式的核心类型之一,其核心目标是将对象的创建与使用解耦,提升系统的扩展性和可维护性。根据创建逻辑的抽象层级不同,工厂模式可分为以下三种类型:三、抽象工厂模式(Abstract Factory)

说白了,其实就是这个工厂能够实现更多的协议,我们在原先的工厂类之中添加一个协议方法,让其可以生产computer, 我们可以在同个协议之中定义多个方法,也可以利用协议多继承的性质

//协议之中定义多个方法
@protocol PoductMakeProtocol <NSObject>+ (phone *)sellPhone; + (computer *)sellComputer; @end//多继承
@protocol PhoneMakeProtocol <NSObject>- (phone *)sellPhone; @end@protocol ComputerMakeProtocol <NSObject>- (computer *)sellComputer; @end

工厂实例

 @interface iPhoneFactory : NSObject <PhoneMakeProtocol>@end@implementation iPhoneFactory- (phone *)sellPhone {return [[iPhone alloc] init];}- (computer *)sellComputer {return [[Mac alloc] init];
}@end

优点

  • 保证产品族内对象的一致性(如同一品牌的汽车部件)
  • 支持横向扩展(新增产品族无需修改现有代码)

缺点

  • 扩展新产品类型需修改抽象工厂接口,灵活性较低

三种模式对比

维度简单工厂工厂方法抽象工厂
核心目标集中创建单一产品子类化扩展单一产品创建关联产品族
扩展性差(需修改工厂类)高(新增工厂类)中(新增产品族)
适用场景简单、固定类型动态扩展单一产品类型多维度关联产品
典型应用工具类生成器支付方式扩展跨平台 UI 组件
  1. 演进逻辑

    • 简单工厂 → 工厂方法:从硬编码参数到多态扩展,解决开闭原则问题
    • 工厂方法 → 抽象工厂:从单一产品到产品族的抽象,提升系统一致性
  2. 选择原则

    • 若产品类型单一且稳定,优先使用简单工厂
    • 若需灵活扩展独立产品,选择工厂方法
    • 若需管理多个关联产品,采用抽象工厂
http://www.xdnf.cn/news/583957.html

相关文章:

  • uniapp-商城-65-shop(1-品牌信息显示,将数据库信息同步到vuex的state)
  • 如何构建一个简单的AI Agent(极简指南)
  • 深度学习入门到实战:用PyTorch打通数学、张量与模型训练全链路​
  • 使用 A2A Python SDK 实现 CurrencyAgent
  • 开闭原则 (Open/Closed Principle, OCP)
  • leetcode hot100刷题日记——10.螺旋矩阵
  • day33 python深度学习入门
  • jmeter登录接口生成一批token并写入csv文件
  • 浪潮Inspur服务器产品线概述
  • 【paddle】常见的数学运算
  • Ubuntu 22.04上升级npm版本
  • 升级node@22后运行npm install报错 distutils not found
  • canvas(三)-动画3d
  • iisARR负均衡
  • 【IDEA问题】springboot本地启动应用报错:程序包不存在;找不到符号
  • 在react项目中使用andt日期组件,选择周和季度,直接获取所对应的日期区间
  • C++ HTTP框架推荐
  • 人脸识别备案开启安全防护模式!紧跟《办法》!
  • uni-app学习笔记九-vue3 v-for指令
  • redis Pub/Sub 简介 -16 (PUBLISH、SUBSCRIBE、PSUBSCRIBE)
  • 【C++20新特性】ranges::sort()使用方法,优势,注意点
  • 【1004. 最大连续1的个数 III】
  • ai之pdf解析工具 PPStructure 还是PaddleOCR
  • 火山引擎火山云带宽价格
  • 【工作流】Fastgpt配置豆包模型-火山引擎
  • Github 2025-05-22Go开源项目日报 Top10
  • 【COMPUTEX 2025观察】NVIDIA开放NVLink:一场重构AI算力版图的“阳谋“
  • Go File多终端数据同步技术全解:跨设备数据管理实战指南与复杂场景处理过程
  • PostgreSQL14 +patroni+etcd+haproxy+keepalived 集群部署指南
  • C#在 .NET 9.0 中启用二进制序列化:配置、风险与替代方案