考慮您要撰寫一個Web Mail程式,您手上已經有一些已經開發好的元件(Component),像是開發Web Mail所需要的SMTP處理類、允許上傳附檔的FileUpload類,以及Web安全相關的API、其它相關的Package等等。
當您拿到一些現成的元件,並打算在您的應用程式中使用它們的話,您不應該直接將這些元件耦合至您的應用程式上,例如:
上面的作法會讓您的應用程式直接與多個元件耦合,這種作法不但與元件的依賴度高,日後要修改應用程式本身,或是更換掉依賴的元件都有困難。
您應該定義一個Facade介面,在當中定義好商務邏輯,例如寄送附件檔案的方法(method),然後在一個實現類中,組合您手邊的元件,使其達成您所希望的商務行為,例如:
如上圖所示的,您的應用程式本身將不直接依賴於您的元件,而是依賴一個介面,當您想要更改某個商務行為的實作時,只要修改實現的類就可以了,應用程式本身不用作任何修改。
Facade模式的結構如下:
Facade模式隱藏了各個元件之間的合作行為,以及元件本身的操作與設定細節,固而必失去了一些直接操作元件的方便性,所以對於喜歡追求與操作細節的程式設計人員而言,不會很喜歡透過Facade來操作背後的元件,所以您的Facade介面設計,通常要在元件依賴性及元件的支接操作性之間作個平衡。