Java設計模式以外觀模式

 1、簡介java

    外觀模式(Facade),隱藏內部各子系統的細節與複雜性,向客戶端提供一個同一的調用接口,使得複雜系統易於被訪問和使用。spa

 

     外觀模式,簡單點講就是把複雜的各個子系統組合成一個接口,提供給客戶使用。如上圖,主要涉及3個重要角色:3d

一、子系統角色:實現子系統的邏輯功能。對於客戶端來講是未知的,子系統之間能夠有交互。blog

二、門戶角色:核心角色。供客戶端調用,熟悉內部子系統功能。根據客戶需求對子系統進行功能對組合,抽象爲一個接口。接口

三、客戶角色:經過調用Facade接口來完成要實現的功能it

 

2、實戰class

    假設有一棟別墅,裏面有不少門,好比臥室門、大廳門、廚房門,主人出遠門以前必需要把這些門關上,通常的作法就是一個一個關上,若是採用外觀模式,能夠提供一個總開關,統一對全部門進行開關控制。擴展

首先定義一個關門操做的接口:方法

public interface Door {
    public void closeDoor();
}

  

臥室門、大廳門、廚房門分別建立一個類,實現Door接口:im

public class BedroomDoor implements Door {
    public void closeDoor() {
        System.out.println("closing bedroom door.");
    }
}
public class KitchenDoor implements Door {
    public void closeDoor() {
        System.out.println("closing kitchen door.");
    }
}
public class HallDoor implements Door {
    public void closeDoor() {
        System.out.println("closing hall door.");
    }
}

 

門面類,對各類門的關門操做進行組合或者合併,只提供惟一的接口

public class DoorFacade {
    
    Door bd = new BedroomDoor();
    Door kd = new KitchenDoor();
    Door hd = new HallDoor();
    
    public void closeDoor() {
        bd.closeDoor();
        kd.closeDoor();
        hd.closeDoor();
    }
}

  

客戶端,經過調用門面類的接口便可將全部的門關閉

public class Client {
    public static void main(String[] args) {
        DoorFacade facade = new DoorFacade();
        facade.closeDoor();
    }
}

  

運行結果: 

 

 3、優勢

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

 二、簡單易用:客戶端根本不須要知道子系統內部的實現,或者根本不須要知道子系統內部的構成,它只須要跟Facade類交互便可;

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

相關文章
相關標籤/搜索