本文为敏捷软件开发 - 原则、模式与实践系列的一部分。
本文对应原书第15章
介绍
这两个模式有着共同的目的。它们都把某种策略施加到另外这一组对象上。FACADE模式从上面施加策略,而MEDIATOR模式则从下面施加策略。FACADE模式的使用是明显且受限的,而MEDIATOR模式的使用则是不明显且不受限的。
FACADE模式
MEDIATOR模式
图2展示了QuickEntryMediator
的结构。用一个JList
和一个JTextField
构造了一个QuickEntryMediator
类的示例。QuickEntryMediator
向JTextField
注册了一个匿名的DocumentListener
。每当文本发生变化时,这个listener就调用textFieldChanged
方法。接着,该方法在JList
中查找以这个文本为前缀的元素并选中它。
JList
和JTextField
的使用者并不知道该MEDIATOR的存在。它安静地呆着,把它的策略施加在那些对象上,而无需它们的允许或者知晓。
结论
如果策略涉及范围广泛并且可见,那么可以使用FACADE模式从上面施加该策略。另一方面,如果策略隐蔽并且有针对性,那么MEDIATOR模式是更好的选择。Facade通常是约定的关注点。每个人都同意去使用该facade而不是隐藏于其下的对象。另一方面,Mediator则对用户是隐藏的。它的策略是既成事实的而不是一项约定事务。
完整内容请查看敏捷软件开发 - 原则、模式与实践系列