Skip to content

设计模式 ​

前人总结的"最佳套路"——用成熟的方案解决反复出现的设计问题,写出可扩展、易维护的代码。

设计模式不是发明出来的,而是从大量实践中提炼出来的。就像下棋有定式,编程也有定式——遇到"需要创建对象但不想暴露细节"就用工厂,遇到"需要动态扩展功能"就用装饰器。

GoF 23 种设计模式总览 ​

创建型模式(5 种) ​

解决"如何创建对象"的问题

模式一句话说明iOS 常见场景
单例 (Singleton)全局唯一实例UIApplication.shared、UserDefaults.standard
工厂方法 (Factory Method)子类决定创建什么对象NSNumber numberWith...
抽象工厂 (Abstract Factory)创建一族相关对象UI 主题工厂(深色/浅色)
建造者 (Builder)分步构建复杂对象URLComponents、NSAttributedString
原型 (Prototype)通过复制创建新对象NSCopying 协议

结构型模式(7 种) ​

解决"如何组合类和对象"的问题

模式一句话说明iOS 常见场景
适配器 (Adapter)让接口不兼容的类协同工作Delegate 模式
装饰器 (Decorator)动态添加功能,不改原类NSAttributedString、Category
代理 (Proxy)控制对另一个对象的访问NSProxy、懒加载
外观 (Facade)为复杂子系统提供简单接口SDK 封装层
桥接 (Bridge)抽象与实现分离跨平台 UI 抽象
组合 (Composite)树形结构,统一处理单个和组合对象UIView 视图树
享元 (Flyweight)共享细粒度对象,节省内存UITableViewCell 复用

行为型模式(11 种) ​

解决"对象之间如何通信"的问题

模式一句话说明iOS 常见场景
观察者 (Observer)一对多通知NotificationCenter、KVO
策略 (Strategy)算法封装,运行时切换排序比较器、网络请求策略
命令 (Command)请求封装为对象NSInvocation、Target-Action
责任链 (Chain of Responsibility)请求沿链传递事件响应链 UIResponder
迭代器 (Iterator)顺序访问集合元素NSEnumerator、for-in
模板方法 (Template Method)定义骨架,子类实现细节UIViewController 生命周期
状态 (State)状态改变行为播放器状态机
中介者 (Mediator)减少对象间直接依赖UINavigationController
备忘录 (Memento)保存和恢复状态NSCoding、Codable
访问者 (Visitor)不修改类就添加新操作AST 遍历
解释器 (Interpreter)定义语法并解释执行正则表达式、NSPredicate

内容导航 ​

主题核心内容
创建型模式单例、工厂、抽象工厂、建造者、原型的原理与实现
结构型模式适配器、装饰器、代理、外观、桥接、组合、享元
行为型模式观察者、策略、命令、责任链、状态、模板方法等
iOS 中的设计模式MVC/MVVM/MVP、Delegate、Target-Action、KVO 等 iOS 特有模式
实战与反模式常见滥用场景、过度设计、SOLID 原则实践

六大设计原则(SOLID + 迪米特) ​

原则含义白话版
S — 单一职责一个类只做一件事别让一个类又管 UI 又管网络
O — 开闭原则对扩展开放,对修改关闭加新功能不改老代码
L — 里氏替换子类能替代父类用到父类的地方换成子类不会出 bug
I — 接口隔离接口要小而专别强迫类实现它不需要的方法
D — 依赖倒置依赖抽象而非具体面向协议/接口编程
LoD — 迪米特法则最少知识原则只和直接朋友说话,不和陌生人说话

面试关键

面试不会让你背诵 23 种模式的定义。重点是:遇到什么问题用什么模式,为什么选这个模式,在项目中怎么用的。准备 2-3 个你在项目中实际使用设计模式的案例比背概念更有说服力。