java設計模式-外觀模式

一,概念介紹設計模式

  外觀模式(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();
    }

}

運行結果接口

 

 

3、優勢

  - 鬆散耦合

  使得客戶端和子系統之間解耦,讓子系統內部的模塊功能更容易擴展和維護;io

  - 簡單易用

  客戶端根本不須要知道子系統內部的實現,或者根本不須要知道子系統內部的構成,它只須要跟Facade類交互便可。

  - 更好的劃分訪問層次

  有些方法是對系統外的,有些方法是系統內部相互交互的使用的。子系統把那些暴露給外部的功能集中到門面中,這樣就能夠實現客戶端的使用,很好的隱藏了子系統內部的細節。

 

4、我寫得不足之處望各位批評指正

相關文章
相關標籤/搜索