本文為敏捷軟件開發(fā) - 原則、模式與實踐系列的一部分。
本文對應(yīng)原書第15章
介紹
這兩個模式有著共同的目的。它們都把某種策略施加到另外這一組對象上。FACADE模式從上面施加策略,而MEDIATOR模式則從下面施加策略。FACADE模式的使用是明顯且受限的,而MEDIATOR模式的使用則是不明顯且不受限的。
FACADE模式
圖1
MEDIATOR模式
圖2
圖2展示了QuickEntryMediator的結(jié)構(gòu)。用一個JList和一個JTextField構(gòu)造了一個QuickEntryMediator類的示例。QuickEntryMediator向JTextField注冊了一個匿名的DocumentListener。每當文本發(fā)生變化時,這個listener就調(diào)用textFieldChanged方法。接著,該方法在JList中查找以這個文本為前綴的元素并選中它。
JList和JTextField的使用者并不知道該MEDIATOR的存在。它安靜地呆著,把它的策略施加在那些對象上,而無需它們的允許或者知曉。
結(jié)論
如果策略涉及范圍廣泛并且可見,那么可以使用FACADE模式從上面施加該策略。另一方面,如果策略隱蔽并且有針對性,那么MEDIATOR模式是更好的選擇。Facade通常是約定的關(guān)注點。每個人都同意去使用該facade而不是隱藏于其下的對象。另一方面,Mediator則對用戶是隱藏的。它的策略是既成事實的而不是一項約定事務(wù)。
完整內(nèi)容請查看敏捷軟件開發(fā) - 原則、模式與實踐系列