本章主軸#
現實世界的問題從來不規則。當特例與變化多到讓你抓不到全貌時,需要一個工具把變動「攤開來看」。本章介紹作者自創的分析矩陣(Analysis Matrix)——一個簡化版的決策表,可揭露問題中的概念與變化,並指引出該用哪些設計模式。
步驟總覽#
- 取一個情境,挑出最重要的功能點,整理為矩陣(每列是一個概念)
- 處理下一個情境,需要時擴展矩陣
- 出現新概念時新增列,即使其他情境暫時沒有對應實作
- 列代表規則
- 欄代表特定情境
- 從矩陣識別適用的模式
- 發展高層設計
案例:跨國 e-commerce#
需求:先支援美國與加拿大;之後再加德國等。
| 概念 | 美國銷售 | 加拿大銷售 | 德國銷售 |
|---|---|---|---|
| Calculate freight | UPS rates | Canadian shipper | German shipper |
| Verify address | U.S. postal rules | Canadian postal rules | German postal rules |
| Calculate tax | State and local taxes | GST + PST | German VAT |
| Money | USD | CAD | DM |
| Dates | mm/dd/yyyy | dd/mm/yyyy | dd/mm/yyyy |
| Maximum weight | 30 kg |
矩陣建立過程中自然會發現需求漏洞——某個情境提到了重量上限,其他卻沒提;這種不一致就是回頭追問客戶的具體題目。
客戶的特性:
- 對問題領域非常熟,但不擅長以概念表達
- 常用「always」「never」其實是「usually」「seldom」
- 你問具體問題就能得到好答案,問「還有什麼」幾乎沒用
從矩陣讀出模式#
列 → Strategy#
每一列是「某個概念在不同情境下的不同實作」——典型的 Strategy 場景。 (Money、Dates 兩列例外,可用語言內建類型搭配 Currency / Locale 處理。)
欄 → Abstract Factory#
每一欄是「某個情境要用的整組物件」——典型的 Abstract Factory 場景。
結合起來#
- 為每一列建立一個 Strategy
- 為每一欄建立一個 ConcreteFactory,負責挑出該情境要用的 Strategy 們

Figure 16-1: 高層應用設計——AbstractFactory(USAF/CanAF/GermanAF)與三組 Strategy(Tax、Freight、Address)合作
變體:印製銷售單#
若再加上印單需求:
- 美國:要表頭
- 加拿大:表頭 + 表尾
- 德國:兩個不同的表尾
可用 Decorator 列表示。幾乎任何牽涉多型的模式(Bridge、Composite、Chain of Responsibility、Command、Decorator、Iterator、Mediator、Observer、Proxy、Template、Visitor)都可能在分析矩陣中出現。
矩陣中的矩陣#
實務上常出現「矩陣裡又有矩陣」。例如美國運送,可再依運送商(USPS、UPS、FedEx)拆分。當情境太複雜,作者會先用矩陣中的矩陣,再進一步轉成共通/差異表。
何時最有用?#
- 需求散亂、特例多到無法掌握全貌時
- 客戶以「特例」而非「規則」描述問題時
- 把複雜問題壓進一張表後,模式自然浮現
分析矩陣不一定能涵蓋整個設計,但通常能涵蓋一大塊。它是「想清楚」與「動手實作」之間極好用的橋樑。
本章重點#
- 把每個情境逐欄填,每個概念逐列展開,新需求只需新增欄或列
- 列代表規則 → 多半對應 Strategy 模式
- 欄代表情境 → 多半對應 Abstract Factory 模式
- 矩陣讓不一致與漏洞「視覺化」,是與客戶釐清需求的好工具
- 來自人類學與認知工程的方法,在軟體領域同樣有效