从Swift代码解析设计模式的实战应用

23 阅读3分钟

前言

在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应用的优秀实践方案。