P87 什么是设计模式?为什么资深架构师都离不开它?
面试题:什么是设计模式?为什么要学它?架构师为什么离不开?
1. 什么是设计模式
设计模式是前人总结的、针对反复出现的软件设计问题的通用解决方案(套路)。它不是代码库,而是一套"在特定场景下怎么组织类/对象/依赖"的经验模板。
经典来源:《设计模式:可复用面向对象软件的基础》(GoF 23 种模式),分三类:
- 创建型:单例、工厂、建造者、原型(怎么创建对象);
- 结构型:代理、适配器、装饰器、外观、组合(怎么组织对象结构);
- 行为型:策略、模板方法、观察者、责任链、状态(怎么协作和分配职责)。
2. 为什么要用设计模式
- 解决重复问题:不用每次从零设计,直接套用经过验证的方案;
- 可维护性:代码结构清晰、职责单一,改动局部化;
- 可扩展性:开闭原则(对扩展开放、对修改关闭),新增功能不动老代码;
- 沟通效率:说"这里用策略模式"大家秒懂,是团队通用语言。
3. 为什么架构师离不开
- 架构师设计的是系统骨架:模块划分、依赖方向、扩展点——本质就是模式和原则的组合;
- 大型框架源码(Spring、Netty、MyBatis)里全是设计模式的影子:
- Spring:工厂(BeanFactory)、代理(AOP)、观察者(事件)、模板方法(JdbcTemplate);
- Netty:责任链(Pipeline)、观察者(Future/Listener)、装饰器;
- MyBatis:代理(Mapper)、建造者(SqlSessionFactoryBuilder)。
- 架构师要权衡:什么时候用什么模式、什么时候不过度设计——这是经验和判断力,也是"资深"的体现。
4. 核心原则(比模式更重要)
- 单一职责、开闭原则、里氏替换、依赖倒置、接口隔离(SOLID);
- 模式是原则的落地手段;理解原则才能灵活用模式。
5. 加分点
- 强调"设计模式不是银弹":先理解问题,再选模式,避免为了用而用;
- 能举出自己项目/框架里的实例(比背 23 个定义加分);
- 追问"和设计原则的关系":模式解决特定场景,原则是更高层的指导思想。
一句话总结
设计模式是解决重复设计问题的成熟套路,提升代码的可维护性、扩展性和团队沟通效率;架构师设计系统骨架时本质就是在组合这些模式,并能结合 SOLID 原则权衡取舍、避免过度设计。