淺談JAVA設計模式之——面板模式(Facade)__java設計模式

來源:互聯網
上載者:User
轉載請註明出處:http://blog.csdn.net/l1028386804/article/details/45568655
一、概述

為子系統中的一組介面提供一個一致的介面,Facade模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。 二、適用性

1.當你要為一個複雜子系統提供一個簡單介面時。子系統往往因為不斷演化而變得越來越 複雜。大多數模式使用時都會產生更多更小的類。這使得子系統更具可重用性,也更容 易對子系統進行定製,但這也給那些不需要定製子系統的使用者帶來一些使用上的困難。 Facade可以提供一個簡單的預設視圖,這一視圖對大多數使用者來說已經足夠,而那些需 要更多的可定製性的使用者可以越過facade層。

2.客戶程式與抽象類別的實現部分之間存在著很大的依賴性。引入facade將這個子系統與客 戶以及其他的子系統分離,可以提高子系統的獨立性和可移植性。

3.當你需要構建一個階層的子系統時,使用facade模式定義子系統中每層的進入點。 如果子系統之間是相互依賴的,你可以讓它們僅通過facade進行通訊,從而簡化了它們 之間的依賴關係。 三、參與者

1.Facade 知道哪些子系統類負責處理請求。 將客戶的請求代理給適當的子系統對象。

2.Subsystemclasses 實現子系統的功能。 處理由Facade對象指派的任務。 沒有facade的任何相關資訊;即沒有指向facade的指標。 四、類圖

五、樣本

Facade

package com.lyz.design.facade;/** * Facade  * @author liuyazhuang * */public class Facade {    ServiceA sa;    ServiceB sb;    ServiceC sc;    public Facade() {        sa = new ServiceAImpl();        sb = new ServiceBImpl();        sc = new ServiceCImpl();     }        public void methodA() {        sa.methodA();        sb.methodB();    }        public void methodB() {        sb.methodB();        sc.methodC();    }        public void methodC() {        sc.methodC();        sa.methodA();    }}

Subsystemclasses

package com.lyz.design.facade;/** * Subsystemclasses  * @author liuyazhuang * */public class ServiceAImpl implements ServiceA {    public void methodA() {        System.out.println("這是服務A");    }}

package com.lyz.design.facade;/** * Subsystemclasses  * @author liuyazhuang * */public class ServiceBImpl implements ServiceB {    public void methodB() {        System.out.println("這是服務B");    }}

package com.lyz.design.facade;/** * Subsystemclasses  * @author liuyazhuang * */public class ServiceCImpl implements ServiceC {    public void methodC() {        System.out.println("這是服務C");    }}

package com.lyz.design.facade;/** * Test * @author liuyazhuang * */public class Test {    public static void main(String[] args) {    ServiceA sa = new ServiceAImpl();    ServiceB sb = new ServiceBImpl();        sa.methodA();        sb.methodB();        System.out.println("========");        //facade        Facade facade = new Facade();        facade.methodA();        facade.methodB();    }}

result

這是服務A這是服務B========這是服務A這是服務B這是服務B這是服務C


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.