設計模式 外觀模式

2021-08-11 00:07:36 字數 1988 閱讀 4179

/*

外觀模式也被稱為門面模式。當我們開發android的時候,無論是做sdk還是封裝api,大多會用到外觀模式,它通過乙個外觀類使得整個系統的結構只有乙個統一的高層介面,這樣能降低使用者的使用成本。

定義:要求乙個子系統的外部與內部的通訊必須通過乙個統一的物件進行。此模式提供乙個高層的介面,使得子系統更易於使用。

在外觀模式中有如下角色:

facade:外觀類,知道哪些子系統類負責處理請求,將客戶端的請求**給適當的子系統物件。

subsystem:子系統類,可以有乙個或者多個子系統。實現子系統的功能,處理外觀類指派的任務,注意子系統類不含有外觀類的引用。

*//*

外觀模式的簡單實現

舉乙個武俠的例子。首先,我們把武俠張無忌當做乙個系統。張無忌作為乙個武俠,他本身分為3個系統,分別是招式、內功和經脈。

*/1.子系統類

/** * 子系統招式

*/public class zhaoshi

public void qishangquan()

public void shenghuo()

}/**

* 子系統內功

*/public class neigong

public void qiankun()

}/**

* 子系統經脈

*/public class jingmai

}張無忌有很多武學和內功,怎麼將它們搭配並對外界隱藏呢?接下來檢視外觀類。

2.外觀類

這裡的外觀類就是張無忌,他負責將自己的招式、內功和經脈通過不同的情況合理地運用,**如下所示:

/** * 外觀類張無忌

*/public class zhangwuji

/*** 使用乾坤大挪移

*/public void qiankun()

/*** 使用七傷拳

*/public void qishang() }/*

初始化外觀類的同時將各個子系統類建立好。很明顯,張無忌很好地將自身的各個系統進行了搭配。如果其使用七傷拳,就需要開啟經脈、使用內功九陽神功,接下來使用七傷拳。

否則七傷拳的威力會大打折扣。

*/3.客戶端呼叫

public class client }/*

當張無忌使用乾坤大挪移或者七傷拳的時候,比武的對手顯然不知道張無忌本身運用了什麼,同時張無忌也無須重新計畫使用七傷拳的時候要怎麼做(他已經早就計畫好了)。

如果每次使用七傷拳都要計畫怎麼做很顯然會增加成本並貽誤戰機。另外張無忌也可以改變自己的內功、招式和靜脈,這些都是對比武的對手有所隱藏的。

外觀模式本身就是將子系統的邏輯和互動隱藏起來,為使用者提供乙個高層次的介面,使得系統更加易用,同時也隱藏了具體的實現,這樣即使具體的子系統發生了變化,使用者也不會感知到。

*//*

外觀模式的使用場景和優缺點

使用場景:

構建乙個有層次結構的子系統時,使用外觀模式定義子系統中每層的入口點。如果子系統之間是相互依賴的,則可以讓其通過外觀介面進行通訊,減少子系統之間的依賴關係。

子系統往往會因為不斷地重構演化而變得越來越複雜,大多數的模式使用時也會產生很多很小的類,這給外部呼叫它們的使用者程式帶來了使用上的困難。我們可以使用外觀類提供乙個簡單的介面,對外隱藏子系統的具體實現並隔離變化。

當維護乙個遺留的大型系統時,可能這個系統已經非常難以維護和拓展;但因為它含有重要的功能,所以新的需求必須依賴於它,這時可以使用外觀類,為設計粗糙或者複雜的遺留**提供乙個簡單的介面,讓新系統和外觀類互動,而外觀類負責與遺留的**進行互動。

優點:減少系統的相互依賴,所有的依賴都是對外觀類的依賴,與子系統無關。

對使用者隱藏了子系統的具體實現,減少使用者對子系統的耦合。這樣即使具體的子系統發生了變化,使用者也不會感知到。

加強了安全性,子系統中的方法如果不在外觀類中開通,就無法訪問到子系統中的方法。

缺點:不符合開放封閉原則。如果業務出現變更,則可能要直接修改外觀類。

*/以上學習於android高階之光

設計模式 外觀模式

外觀模式,我的理解就是將複雜的類進行重新封裝,將簡單的介面呈現出來,降低呼叫端和實際類的耦合性。拿 大話設計模式 上邊關於 和 的例子來說。對於不入門的股民來說,交易有些過於龐大,需要學習的東西很多,如果沒整明白就進行投資,很容易賠錢的。很多剛入 的股民都賠的很慘。而買 有提出了乙個新的觀念,我們買...

設計模式 外觀模式

何為外觀模式?外觀模式 為子系統中的一組介面提供乙個一致的介面,此模式定義了乙個高層介面,這個介面使得一子系統更加容易使用。它是一種結構型模式,它主要解決的問題是 元件的客戶和元件中各種複雜的子系統有了過多的耦合,隨著外部客戶程式和 各子系統的演化,這種過多的耦合面臨很多變化的挑戰。uml類圖 乙個...

設計模式 外觀模式

外觀模式說白了就是為一組介面提供乙個一致的介面。例如 定義三個類a b c,每個類各定義乙個方法。class a pubic void showa cout a showa pubic void showb cout b showb pubic void showc cout c showc 定義乙...