原型设计模式Prototype原型模式是创建型设计模式也是 iOS 开发中最简单、最实用的设计模式之一。一、核心定义一句话总结通过克隆复制已有的原型对象快速创建一个属性相同、相互独立的新对象不通过传统初始化init创建。通俗比喻你有一份填好的完美表格原型对象不用重新手写一份直接复印出一模一样的新表格克隆对象复印稿和原稿互不影响。核心解决的痛点创建复杂/配置繁琐的对象时避免重复初始化防止修改原对象保证数据安全https://www.iqiyi.com/v_27vhvdkoc34.htmlhttps://www.iqiyi.com/v_2eo5elqbj3w.htmlhttps://www.iqiyi.com/v_2d26dzszu9w.htmlhttps://www.iqiyi.com/v_msitceusus.html提升对象创建效率克隆比init快很多。UML图原型 Prototype 接口将对克隆方法进行声明。 在绝大多数情况下 其中只会有一个名为 clone克隆的方法。具体原型 Concrete Prototype 类将实现克隆方法。 除了将原始对象的数据复制到克隆体中之外 该方法有时还需处理克隆过程中的极端情况 例如克隆关联对象和梳理递归依赖等等。客户端 Client 可以复制实现了原型接口的任何对象二、iOS 核心知识点浅拷贝 vs 深拷贝原型模式的本质就是对象拷贝iOS 中分为两种拷贝方式这是必须掌握的核心类型含义内存表现适用场景浅拷贝Shallow Copy只拷贝对象本身对象内部的引用类型成员共用同一块内存新对象 ≠ 原对象但内部引用属性指向同一个简单对象、无嵌套引用类型深拷贝Deep Copy拷贝对象本身 递归拷贝所有嵌套的引用类型成员新对象和原对象完全独立无共享内存复杂对象、嵌套模型、需要完全隔离的场景✅ iOS 规则Swift 结构体struct值类型默认深拷贝Swift 类class引用类型必须手动实现深拷贝OC通过NSCopying协议实现拷贝。三、iOS 原生支持苹果官方直接为原型模式提供了原生接口开箱即用OCNSCopying/NSMutableCopying协议 copy/mutableCopy方法https://www.iqiyi.com/v_pjedruiaq0.htmlhttps://www.iqiyi.com/v_e9rp64td5g.htmlhttps://www.iqiyi.com/v_1gvhadgh9s0.htmlSwift自定义Copyable协议实现copy()方法。四、iOS 开发实战场景这些场景你每天都可能用到只是没意识到是原型模式1. 编辑页数据隔离场景用户进入个人资料编辑页不能直接修改原数据防止取消编辑后数据错乱。方案克隆原用户模型 → 修改克隆对象 → 保存时才替换原对象。2. 复杂对象快速复用场景网络请求、配置文件、UI 样式等初始化成本高的对象。方案创建一个原型配置 → 克隆复用不用重复写参数。3. 大量相似对象创建场景列表模型、游戏角色、自定义控件批量生成。方案克隆原型对象比init初始化效率更高。4. 撤销/重做Undo/Redo场景笔记、绘图、表单编辑的撤销功能。方案克隆对象状态保存历史记录。5. 缓存对象复用场景缓存的商品、主题、UI 组件直接克隆使用。五、Swift 代码实战场景 1基础深拷贝针对类引用类型实现完整的原型模式// 1. 定义原型协议 protocol Prototype { func clone() - Self } // 2. 复杂业务模型用户模型 class UserModel: Prototype { let name: String var age: Int // 嵌套引用类型深拷贝关键 var address: AddressModel init(name: String, age: Int, address: AddressModel) { self.name name self.age age self.address address } // 3. 实现深拷贝 func clone() - UserModel { // 递归克隆嵌套对象 let newAddress address.clone() return UserModel(name: name, age: age, address: newAddress) } } // 嵌套模型也实现原型 class AddressModel: Prototype { var city: String init(city: String) { self.city city } func clone() - AddressModel { AddressModel(city: city) } } // 4. 使用原型模式创建对象 // 原始对象原型 let originalUser UserModel(name: 张三, age: 20, address: AddressModel(city: 北京)) // 克隆新对象核心 let cloneUser originalUser.clone() // 修改克隆对象不影响原对象 cloneUser.age 25 cloneUser.address.city 上海 print(originalUser.age, originalUser.address.city) // 20 北京原对象不变 print(cloneUser.age, cloneUser.address.city) // 25 上海新对象独立场景 2极简写法Struct 值类型Swift 结构体天生支持原型模式无需额外代码struct ProductModel { var name: String var price: Double } // 原型对象 let original ProductModel(name: iPhone, price: 5999) // 直接拷贝 原型模式 let clone original六、原型模式 vs 其他创建型模式快速区分模式核心逻辑适用场景原型模式克隆现有对象复杂/已配置对象、需要数据隔离简单工厂统一创建新对象简单固定对象工厂方法子类工厂创建对象频繁扩展的对象生成器模式分步配置创建对象多参数、链式配置总结原型模式 对象克隆是 iOS 开发最简单、最实用的创建型模式核心价值快速创建独立对象保护原数据不被修改Swift 进阶struct 默认深拷贝class 需手动实现clone()黄金场景编辑页数据隔离、复杂对象复用、列表模型创建。