1. 设计模式是什么
这是什么:设计模式 = 前人总结的代码套路。针对"这类问题代码该怎么组织"给出标准答案,经典教材《设计模式:可复用面向对象软件的基础》一共收录 23 种,简称 GoF 23(GoF = 四人帮,四位作者的昵称)。
为什么用:小程序随便堆代码都能跑,项目一大就变成"面条地狱"——改一处崩三处、同类代码抄五份、新人看不懂老代码。设计模式就是这些坑的标准解法:不光少走弯路,还能让团队说"这里用观察者"就秒懂彼此。
如何用:本章先看 23 种模式的三大分类地图,再用一个 Python 小例子感受"堆代码"和"用模式"的差别。
一本 1994 年的书,把代码套路起了名字
GoF 把 23 种模式分成三大类,每类回答一个不同的问题:
| 分类 | 回答的问题 | 代表模式 |
|---|---|---|
| 创建型 | 对象该怎么创建? | 单例、工厂、建造者、原型 |
| 结构型 | 类和对象该怎么组装? | 适配器、外观、装饰器、代理 |
| 行为型 | 对象之间怎么协作? | 策略、观察者 |
不用背全 23 种——实际开发里高频出现的就是本教程挑的这 10 个,其余的遇到再查。
Python 里的模式是"半隐形"的
同样一个模式,在 Java 里要写一个接口加两个类,在 Python 里可能一行函数就搞定。比如策略模式(把算法做成可替换的),Java 要定义策略接口,Python 直接传函数:
def vip_price(price): # 一个策略
return round(price * 0.8, 2)
def new_user_price(price): # 另一个策略
return round(price * 0.9, 2)
def checkout(price, strategy): # 策略作为参数传进去
return strategy(price)
print(checkout(100, vip_price))
print(checkout(100, new_user_price))
你会看到:
80.0
90.0
checkout 一行没改,计价方式随便换——这就是策略模式的全部思想,Python 用函数是一等公民这个特性免费送给你了。类似地:Python 的模块天然是单例,@decorator 语法是装饰器模式的语言级落地。
所以学设计模式在 Python 里有两条线:模式思想(为什么要这么组织)永远不过时,实现代码(Java 式的接口+类)很多可以大幅简化。本教程两样都讲:先写出模式的标准形态,再给 Python 的地道简化写法。
本章解读
| 说法 | 意思 |
|---|---|
| GoF 23 | 经典教材收录的 23 种模式 |
| 创建型 | 管对象的"出生":造几个、谁来造、怎么造 |
| 结构型 | 管类和对象的"组装":怎么拼起来、怎么对接 |
| 行为型 | 管对象的"协作":谁通知谁、算法怎么换 |
| 一等公民 | 函数可以像普通值一样传来传去、存进变量 |
记忆口诀
创建管出生,结构管组装,行为管协作;Java 写类,Python 传函数。
动手改
- 给
checkout再写一个策略black_friday_price:直接打五折,算算 100 元结多少 - 把 GoF 三大类的表格抄一遍,盖住答案凭记忆填"代表模式"那列
- 翻翻你写过的一段代码,找一处"每次加需求都要改动老代码"的地方——这就是模式的用武之地
下一章:创建型模式:单例与工厂 🐸