知识卡片
用桥梁模式让视图类型与语言资源两个维度独立扩展
内容
MVC框架多语言视图有两个独立变化维度:视图呈现类型(JSP靠替换占位符实现多语言, SWF靠重写URL参数)和语言资源本身(各语言一份key-value配置)。这与桥梁模式”用什么笔画 什么图形”是同一类问题:AbsView持有AbsLangData引用,视图类各自决定怎么用语言资源,语言 类各自提供内容。发散:新增视图类型不需改语言包,新增语言不需改视图实现,两维度正交 扩展。
参考来源
- 位置:《设计模式之禅(第2版)》第37章《MVC框架》37.1.4节(源文件:_epub-src/text/part0159.html)
- 结论依据:原文说明"视图管理器的功能很单一……在这里用到的主要模式就是桥梁模式……桥梁模式可以解决用什么笔(圆珠笔、铅笔)和画什么图形(圆形、方形)的问题,我们遇到的问题与此场景类似",并用`AbsView`持有`AbsLangData`、`JspView`/`SwfView`各自`assemble()`的实现印证,总结"通过桥梁模式我们把不同的语言和不同类型的视图结合起来……即使以后增加语言也非常容易扩展"。
- 原始内容:视图管理器的功能很单一,按照模型指定的要求返回视图,在这里用到的主要模式就是桥梁模式……桥梁模式可以解决用什么笔(圆珠笔、铅笔)和画什么图形(圆形、方形)的问题,我们遇到的问题与此场景类似……通过桥梁模式我们把不同的语言和不同类型的视图结合起来,共同提供一个多语言的应用系统,即使以后增加语言也非常容易扩展。