考慮您要撰寫一個(gè)Web Mail程式,您手上已經(jīng)有一些已經(jīng)開發(fā)好的元件(Component),像是開發(fā)Web Mail所需要的SMTP處理類、允許上傳附檔的FileUpload類,以及Web安全相關(guān)的API、其它相關(guān)的Package等等。
當(dāng)您拿到一些現(xiàn)成的元件,並打算在您的應(yīng)用程式中使用它們的話,您不應(yīng)該直接將這些元件耦合至您的應(yīng)用程式上,例如:

上面的作法會(huì)讓您的應(yīng)用程式直接與多個(gè)元件耦合,這種作法不但與元件的依賴度高,日後要修改應(yīng)用程式本身,或是更換掉依賴的元件都有困難。
您應(yīng)該定義一個(gè)Facade介面,在當(dāng)中定義好商務(wù)邏輯,例如寄送附件檔案的方法(method),然後在一個(gè)實(shí)現(xiàn)類中,組合您手邊的元件,使其達(dá)成您所希望的商務(wù)行為,例如:

如上圖所示的,您的應(yīng)用程式本身將不直接依賴於您的元件,而是依賴一個(gè)介面,當(dāng)您想要更改某個(gè)商務(wù)行為的實(shí)作時(shí),只要修改實(shí)現(xiàn)的類就可以了,應(yīng)用程式本身不用作任何修改。
Facade模式的結(jié)構(gòu)如下:

Facade模式隱藏了各個(gè)元件之間的合作行為,以及元件本身的操作與設(shè)定細(xì)節(jié),固而必失去了一些直接操作元件的方便性,所以對(duì)於喜歡追求與操作細(xì)節(jié)的程式設(shè)計(jì)人員而言,不會(huì)很喜歡透過Facade來操作背後的元件,所以您的Facade介面設(shè)計(jì),通常要在元件依賴性及元件的支接操作性之間作個(gè)平衡。
當(dāng)您拿到一些現(xiàn)成的元件,並打算在您的應(yīng)用程式中使用它們的話,您不應(yīng)該直接將這些元件耦合至您的應(yīng)用程式上,例如:

上面的作法會(huì)讓您的應(yīng)用程式直接與多個(gè)元件耦合,這種作法不但與元件的依賴度高,日後要修改應(yīng)用程式本身,或是更換掉依賴的元件都有困難。
您應(yīng)該定義一個(gè)Facade介面,在當(dāng)中定義好商務(wù)邏輯,例如寄送附件檔案的方法(method),然後在一個(gè)實(shí)現(xiàn)類中,組合您手邊的元件,使其達(dá)成您所希望的商務(wù)行為,例如:

如上圖所示的,您的應(yīng)用程式本身將不直接依賴於您的元件,而是依賴一個(gè)介面,當(dāng)您想要更改某個(gè)商務(wù)行為的實(shí)作時(shí),只要修改實(shí)現(xiàn)的類就可以了,應(yīng)用程式本身不用作任何修改。
Facade模式的結(jié)構(gòu)如下:

Facade模式隱藏了各個(gè)元件之間的合作行為,以及元件本身的操作與設(shè)定細(xì)節(jié),固而必失去了一些直接操作元件的方便性,所以對(duì)於喜歡追求與操作細(xì)節(jié)的程式設(shè)計(jì)人員而言,不會(huì)很喜歡透過Facade來操作背後的元件,所以您的Facade介面設(shè)計(jì),通常要在元件依賴性及元件的支接操作性之間作個(gè)平衡。