外觀模式-java

概念:

又稱門面模式,隱藏系統(tǒng)的復雜性,并向客戶端提供了一個客戶端可以訪問系統(tǒng)的接口。這種類型的設計模式屬于結(jié)構(gòu)型模式,它向現(xiàn)有的系統(tǒng)添加一個接口,來隱藏系統(tǒng)的復雜性。

外部應用程序不用關心內(nèi)部子系統(tǒng)的具體的細節(jié),這樣會大大降低應用程序的復雜度,提高了程序的可維護性。

這種模式涉及到一個單一的類,該類提供了客戶端請求的簡化方法和對現(xiàn)有系統(tǒng)類方法的委托調(diào)用。

外觀模式“迪米特法則”的典型應用。

結(jié)構(gòu):

外觀(Facade)角色:為多個子系統(tǒng)對外提供一個共同的接口。
子系統(tǒng)(Sub System)角色:實現(xiàn)系統(tǒng)的部分功能,客戶可以通過外觀角色訪問它。

實現(xiàn)案例:

以實現(xiàn)一個系統(tǒng)的簡單架構(gòu)為例,客戶端需要使用三個子系統(tǒng)(HttpRequest、ImageLoader、Common)提供的功能方法,這里用外觀類(Facade),對這些子系統(tǒng)進行委托調(diào)用。

//子系統(tǒng)1
public class HttpRequest {
    public void init() {
        System.out.println("初始化... HttpRequest");
    }

    public void request() {
        System.out.println("執(zhí)行網(wǎng)絡請求... http");
    }
}
//子系統(tǒng)2
public class ImageLoader {
    public void init() {
        System.out.println("初始化... ImageLoader");
    }

    public void load() {
        System.out.println("加載圖片...image");
    }
}
//子系統(tǒng)3
public class Common {
    public void init() {
        System.out.println("初始化... Common");
    }

    public void method() {
        System.out.println("執(zhí)行公共方法... common");
    }
}
//外觀類
public class Facade {
    private Common common;
    private HttpRequest httpRequest;
    private ImageLoader imageLoader;

    public Facade() {
        common = new Common();
        httpRequest = new HttpRequest();
        imageLoader = new ImageLoader();
    }

    public void init() {
        common.init();
        httpRequest.init();
        imageLoader.init();
    }

    public void httpRequest() {
        httpRequest.request();
    }

    public void loadImage() {
        imageLoader.load();
    }

    public void commonMethod() {
        common.method();
    }
}
public class Test {
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.init();
        System.out.println(">>>>>>>>>>>>>>>>>");
        facade.httpRequest();
        facade.commonMethod();
        facade.loadImage();
    }
}

系統(tǒng)設計常用的一種模式,案例中Facade聚合了各個子系統(tǒng),并對子系統(tǒng)的功能方法對外提供了統(tǒng)一的封裝。

優(yōu)點:

1、減少系統(tǒng)相互依賴。
2、提高靈活性。
3、提高了安全性。

缺點:

不符合開閉原則,修改起來很麻煩。

使用場景:

1、當一個復雜系統(tǒng)的子系統(tǒng)很多時,外觀模式可以為系統(tǒng)設計一個簡單的接口供外界訪問。
2、當客戶端與多個子系統(tǒng)之間存在很大的聯(lián)系時,引入外觀模式可將它們分離,從而提高子系統(tǒng)的獨立性和可移植性。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容