一,概念介紹設計模式
外觀模式(Facade),他隱藏了系統的複雜性,並向客戶端提供了一個能夠訪問系統的接口。這種類型的設計模式屬於結構性模式。爲子系統中的一組接口提供了一個統一的訪問接口,這個接口使得子系統更容易被訪問或者使用。ide
二,代碼實現測試
直接上代碼吧,邊看代碼遍理解概念,我以爲這樣效果也不錯,spa
第一步:先定義系統A、系統B、系統C這三個類,設計
package test; /** * A系統 * @author ningbeibei * */ public class SystemA { //A系統方法 public void functionA() { System.out.println("我是系統A..."); } }
package test; /** * B系統 * @author ningbeibei * */ public class SystemB { //B系統方法 public void functionB() { System.out.println("我是系統B..."); }
package test; /** * C系統 * @author ningbeibei * */ public class SystemC { //C系統方法 public void functionC() { System.out.println("我是系統C..."); } }
第二步:定義一個高層接口,分別聲明調用三個子系統得方法code
package test; /** * 定義一個更高層得接口,使其實現類實現全部方法 * @author ningbeibei * */ public interface Facade { //方法A void methodA(); //方法B void methodB(); //方法C void methodC(); }
第三步:實現定義得高層接口,而且持有子系統對象引用對象
package test; /** * 實現咱們剛纔定義得高層接口中得方法 * @author ningbeibei * */ public class FacadeImpl implements Facade { //這個系統須要實現類中持有他得引用。 private SystemA systema; private SystemB systemb; private SystemC systemc; /** * 重寫實現類構造方法,初始化這個三個類得對象 */ FacadeImpl(){ systema = new SystemA(); systemb = new SystemB(); systemc = new SystemC(); } //調用A系統方法 @Override public void methodA() { systema.functionA(); } //調用B系統方法 @Override public void methodB() { systemb.functionB(); } //調用B系統方法 @Override public void methodC() { systemc.functionC(); } }
第四步:測試類編寫blog
package test; /** * 測試類 * @author ningbeibei * */ public class test1 { //測試方法 public static void main(String[] args) { /**客戶端在調用這個三個系統時只須要經過Facade * 這個接口就能夠訪問各個系統得方法*/ Facade fac = new FacadeImpl(); fac.methodA(); fac.methodB(); fac.methodC(); } }
運行結果接口
使得客戶端和子系統之間解耦,讓子系統內部的模塊功能更容易擴展和維護;io
客戶端根本不須要知道子系統內部的實現,或者根本不須要知道子系統內部的構成,它只須要跟Facade類交互便可。
有些方法是對系統外的,有些方法是系統內部相互交互的使用的。子系統把那些暴露給外部的功能集中到門面中,這樣就能夠實現客戶端的使用,很好的隱藏了子系統內部的細節。
4、我寫得不足之處望各位批評指正