前言
在iOS应用开发中,设计模式是构建可维护、可扩展代码架构的重要工具。本文通过解析真实的Swift代码,揭示工厂模式、策略模式与桥接模式的协同应用,展现模式组合带来的架构优势。
1. 工厂模式实践
1.1 代码实现
enum Actions: String, CaseIterable {
case getAppInfo = "getAppInfo"
case doTask = "doTask"
static func getAction(method: String) -> ActionProtocol? {
// 通过枚举值定位具体策略
var action: ActionProtocol? {
switch self {
case .getAppInfo:
return GetAppInfo() // 其他case返回对应实例
}
}
}
1.2 模式解析
- 核心思想:将对象的创建逻辑封装在统一入口,客户端无需关心具体实现类。
- 实现方式:通过枚举的
action
属性作为工厂方法,根据不同的case返回对应的ActionProtocol
具体实现。 - 优势:新增功能模块时只需扩展枚举case,符合开闭原则。例如新增
fetchProductInfos
功能时,只需添加case并返回新的FetchProductInfos
类。
1.3 模式优势
- ✅ 集中管理对象创建逻辑
- ✅ 符合开闭原则(新增case即可扩展)
- ✅ 消除客户端与具体类的耦合
2. 策略模式应用
2.1 协议抽象
protocol ActionProtocol {
func doIt(..., with actionModel: ActionModelProtocol)
}
struct GetAppInfo: ActionProtocol {
func doIt(...) { /* 具体实现 */ }
}
2.2 模式解析
- 核心思想:定义算法族,使其可以互相替换。
- 实现方式:通过
ActionProtocol
统一行为接口,每个具体类型(如GetAppInfo
)实现不同的业务逻辑。 - 优势:调用方只需持有协议类型,运行时动态切换策略。例如执行
getAction(method: "doTask")
时,实际执行的是doTask
的策略实现。
2.3 策略切换
// 根据method动态选择策略
let action = Actions.getAction(method: "getAppInfo") action?.doIt(...)
3. 桥接模式运用
3.1 抽象分离
protocol ActionModelProtocol {
func showAlert(data: [AnyHashable:Any])
}
3.2 实现解耦
struct ShowToast: ActionProtocol {
func doIt(..., with actionModel: ActionModelProtocol) {
actionModel.showAlert(data: message)
// 桥接具体UI实现
}
}
3.3 模式解析
- 核心思想:将抽象部分与实现部分解耦,使其可以独立变化。
- 实现方式:
ActionProtocol
通过actionModel
参数桥接具体的UI操作实现,业务逻辑不直接依赖具体UI组件。 - 优势:当需要替换弹窗实现(如改用系统Alert与自定义HUD)时,只需注入不同的
ActionModelProtocol
实现,业务代码无需修改。
4. 模式协同优势
维度 | 优势描述 |
---|---|
扩展性 | 新增功能只需添加case+策略类 |
可维护性 | 修改UI组件不影响业务逻辑 |
可测试性 | 每个策略类可独立单元测试 |
架构清晰度 | 三层抽象分离(工厂/策略/桥接) |
结语
通过这段Swift代码,我们看到了三种设计模式的完美融合:工厂模式像智能流水线创建对象,策略模式如同可替换的算法模块,桥接模式则架起了业务与实现的桥梁。这种模式组合拳为代码带来了:
- 🚀 模块化扩展能力
- 🔧 灵活替换的实现细节
- 🛡️ 面向协议的安全架构
当我们在日常开发中遇到以下场景时,可参考此模式组合:
- 需要统一管理多种相似功能
- 业务逻辑与UI实现需要解耦
- 系统存在多个可变维度(如不同的执行策略)
这种架构设计犹如搭建乐高积木,既保证了单个模块的独立性,又通过标准接口实现整体协同,是构建可维护iOS应用的优秀实践方案。