08|适配器:把旧接口翻译成业务契约
文章发布服务希望调用 send(recipient, body),旧邮件组件却提供 deliver(content, address)。两个参数恰好都是 String,传反也能编译。若业务代码到处记住旧接口的顺序,未来替换组件时就要修改许多调用位置。
09|桥接:拆开业务类型与实现方式两条变化轴
通知有普通提示与警报两种业务类型,也有纯文本与 Markdown 两种呈现方式。如果用继承枚举组合,会出现 TextInfoNotice、MarkdownInfoNotice、TextAlertNotice、MarkdownAlertNotice;新增一种呈现方式后,还要再增加一整排组合类。
10|组合:让叶子与容器接受同一种操作
博客导航里,栏目可以包含文章,也可以包含子栏目。统计整个知识库有多少篇文章时,调用方若不断判断“这是文章还是栏目”,每增加一种嵌套层次都要重复处理结构细节。
11|装饰器:通过包装逐层增加行为
文本展示需要去除首尾空白,有些页面还需要外层方括号。若用继承表示“原文本”“去空白文本”“带框文本”“去空白且带框文本”,组合一多,子类就会迅速增长。