為子系統中的一組介面提供乙個一致的介面,facade模式定義了乙個高層的介面,這個介面使得這一子系統更加容易使用。
無將乙個系統劃成為若干個子系統有利於降低系統的複雜性。乙個常見的設計目標是使子系統間的通訊和相互依賴關係達到最小。達到該目標的途徑之一是引入乙個外觀(facade)物件,它為子系統中較一般的設施提供了乙個單一而簡單的介面。例如演算法庫有很多演算法類,我們在使用的時候分別去呼叫,最後演算法庫的外部呼叫和演算法之間的關係會變的錯綜複雜,這就需要我們引入facade去統一管理。
在遇到以下情況使用facade模式
外觀模式是為了解決類與類之家的依賴關係的,像spring一樣,可以將類和類之間的關係配置到配置檔案中,而外觀模式就是將他們的關係放在乙個facade類中,降低了類類之間的耦合度,該模式中沒有涉及到介面,看下類圖:(我們以乙個計算機的啟動過程為例)。
外觀模式**:
public
class cpu
public
void
shutdown()
}public
class memory
public
void
shutdown()
}public
class disk
public
void
shutdown()
}
computer類(facade類)
public
class computer
public
void
startup()
public
void
shutdown()
}
實現類
public
class user
}
輸出:
start the computer!
cpu startup!
memory startup!
disk startup!
start computer finished!
begin to close the computer!
cpu shutdown!
memory shutdown!
disk shutdown!
computer closed!
如果我們沒有computer類,那麼,cpu、memory、disk他們之間將會相互持有例項,產生關係,這樣會造成嚴重的依賴,修改乙個類,可能會帶來其他類的修改,這不是我們想要看到的,有了computer類,他們之間的關係被放在了computer類裡,這樣就起到了解耦的作用,這就是外觀模式!
通常來講,僅需要乙個facade物件,因此facade物件通常屬於singletono模式。
引用:
Structual設計 Proxy 模式
為其他物件提供一種 以控制對這個物件的訪問。surrogate 對乙個物件進行訪問控制的乙個願意是為了只有在我們確實需要這個物件時才對他進行建立和初始化。譬如手機上載入,每乙個螢幕的大小是有限定的,我們無需每次把所有都載入上,只有在需要展示的時候才對進行建立和初始化。在需要用比較通用和複雜的物件指標...
結構型設計模式之外觀模式(門面模式,Facade)
先來看模擬一下女同胞們生育險報銷的過程,如下 準媽媽住院生孩子 醫院繳納費用 出院時辦理相關證明手續 拿著相關證明材料到公司,由公司進行資訊核實並上報 社保局將報銷費用返還 以上就是大致的乙個生育險的報銷過程,下面我們通過 來實現下 public inte ce ifertilityexpensep...
設計模式 設計原則與設計模式
一切設計都為了 的可擴充套件性和可讀性,都為了應對變化!我們是基於設計原則的思想,來選擇設計模式去實現,可讀,可擴充套件的目標!核心設計思想 對擴充套件開放,對修改關閉。含義 抽象可變功能,可變功能通過子類擴充套件實現,避免對已有抽象實現的修改。優點 便於擴充套件 核心設計思想 單個方法或單個類或單...