外觀模式又稱門面模式,它是為了給子系統中提供乙個一致的介面,從面定義了乙個高層介面 ,這個介面使得這一子系統更加容易使用。定義中提到的子系統指在設計中為了降低複雜性根據一定的規則,對系統進行的劃分,子系統封裝有一些類,客戶程式在使用子系統的時候,可能會像下圖一樣零亂。
上面的實現中,客戶緊緊依賴在子系統的實現,如果子系統發生了變化,極有可能響應到客戶類的呼叫,而且在子系統在不斷優化時會產生更多的小類。
外觀模式就是為了解決這種問題而產生的,下面是使用了門用模式後的圖
這樣就明顯減少了客戶程式和子系統之間的偶合,增加了可維護性。
例子:
資料庫連線這個例子在我們日常中很常用,在用jsp做頁面開發的時候,我們經常會用到連線資料庫,很多初學者都是直接用下面的**(直接連線資料庫,然後獲得連線後直接進行增刪改查)
public class dbcompare {
connection conn = null;
preparedstatement prep = null;
resultset rset = null;
try {
class.forname( "" ).newinstance();
conn = drivermanager.getconnection( "" );
string sql = "select * from where = ?";
prep = conn.preparestatement( sql );
prep.setstring( 1, "" );
rset = prep.executequery();
if( rset.next() ) {
system.out.println( rset.getstring( "但是這樣的**很有弊端,如我們如果想要換個資料庫,這個時候就要大量改動**
為了避免這種情況,我們就可以把獲得連線抽象出來,從而在每次需要對資料庫進行操作的時候,只需要獲得連線。甚至也可以建立乙個連線池。
public class dbcompare {
string sql = "select * from where = ?";
try {
mysql msql=new mysql(sql);
prep.setstring( 1, "" );
rset = prep.executequery();
if( rset.next() ) {
system.out.println( rset.getstring( "優點:
1)對客戶遮蔽子系統元件,因而減少了客戶處理的物件的數目並使得子系統使用起來更加方便
2)它實現了子系統與客戶之間在的耦合關係,而子系統內部的功能元件往往是緊耦合的,松耦合關係使得子系統的元件變化不會影響到它的客戶,facad模式有助於建立層次結構系統,也有助於對物件之間原依賴關係分層,facade模式可以消除複雜的迴圈依賴關係。這一點在客戶程式與子系統是分別實現的時候極為重要。
設計模式之略見一斑 建造模式builder
建造模式是將複雜的內部建立封裝在內部,對於外部呼叫的人來說,只需要傳入建造者和建造工具,對於內部是如何建造成成品的,呼叫者無需關心。建造模式很象抽象工廠模式,細微的區別的大概只有在反覆使用的方能體會。舉個簡單的例子,如汽車,有很多部件,車輪,方向盤,發動機還有各種小零件等等,部件很多,但遠不止這些,...
設計模式之略見一斑 單例模式singleton
單例模式是屬於比較常用的一例,乙個類 class 在記憶體中只有乙個例項。常用方式如下 第一種 餓漢式 public class singleton 在自己內部定義自己乙個例項,是不是很奇怪?注意這是private 只供內部呼叫 private static singleton instance n...
設計模式之略見一斑 建造模式builder
建造模式是將複雜的內部建立封裝在內部,對於外部呼叫的人來說,只需要傳入建造者和建造工具,對於內部是如何建造成成品的,呼叫者無需關心。建造模式很象抽象工廠模式,細微的區別的大概只有在反覆使用的方能體會。舉個簡單的例子,如汽車,有很多部件,車輪,方向盤,發動機還有各種小零件等等,部件很多,但遠不止這些,...