我的在CSDN上的BLOG:http://blog.csdn.net/feb13/article/details/7905731java
FACADE 外觀模式ide
一、 意圖測試
爲子系統中的一組接口提供一個一致的界面,Façade模式定義了一個高層接口,這一接口使得這一子系統更加容易使用。.net
二、 適用性代理
在遇到如下狀況時使用:指針
三、 結構code
四、 參與者對象
Façadeblog
知道哪些子系統類負責子系統對象;接口
將客戶的請求代理給適當的子系統對象。
Subsystemclasses
實現子系統的功能。
處理由Façade對象指派的任務。
沒有façade的任何相關信息;即沒有指向façade的指針。
五、 協助
六、 效果
Façade模式有如下有點:
1) 它對客戶屏蔽子系統組件,於是減小了客戶處理的對象的數目並使得子系統使用起來方便。
2) 它實現了子系統與客戶之間的鬆耦合關係,而子系統內部的功能組件每每是緊耦合的。
3) 它並不限制它們使用子系統類,所以能夠在系統易用性和通用性之間加以選擇。
七、 實現
1) 下降客戶—子系統之間的耦合度;用抽象類實現Façade而它的具體子類對應於不一樣的子系統實現,這能夠進一步下降客戶與子系統的耦合度。
2) 公共子系統類與私有子系統類;一個子系統類與一個類的類似之處是,它們都有接口而且它們都封裝了一些東西——類封裝了狀態和操做,而子系統封裝了一些類。
八、 相關示例
Model
package com.examples.pattern.facade; public interface IModel_A { public void testA(); }
package com.examples.pattern.facade; public class Model_A_impl implements IModel_A { @Override public void testA() { System.out.println("這是模塊A的測試代碼..."); } }
package com.examples.pattern.facade; public interface IModel_B { public void testB(); }
package com.examples.pattern.facade; public class Model_B_impl implements IModel_B { @Override public void testB() { System.out.println("這是模塊B的測試代碼..."); } }
package com.examples.pattern.facade; public interface IModel_C { public void testC(); }
package com.examples.pattern.facade; public class Model_C_impl implements IModel_C { @Override public void testC() { System.out.println("這是模塊C的測試代碼..."); } }
Façade
package com.examples.pattern.facade; public class Facade { public void test() { IModel_A ma = new Model_A_impl(); ma.testA(); IModel_B mb = new Model_B_impl(); mb.testB(); IModel_C mc = new Model_C_impl(); mc.testC(); } }
Client
package com.examples.pattern.facade; public class Client { public static void main(String[] args) { new Facade().test(); } }
九、 相關模式
Abstract Factory模式能夠與Façade模式一塊兒使用以提供一個接口,這個接口可用來以一種子系統獨立的方式建立子系統對象。Abstract Factory也能夠代替Façade模式隱藏那些平臺相關的類。
Mediator 模式與Façade模式的類似支出是,它抽象了一些已有的類的功能。然而,Mediator的目的是對同事之間的任意通信進行抽象,一般集中不屬於任何單 個對象的功能。Mediator的同事對象知道中介者並與它通訊,而不是直接與其餘同類對象通訊。相對而言,Façade模式僅對子系統對象的接口進行抽 象,從而使它們更容易使用;它並不定義新功能,子系統也不知道Façade的存在。