關於facade模式,有人翻譯為外觀模式,有人翻譯為門面模式。我最早接觸這種設計模式是在杭州的時候,那個時候服務端的facade層主要有2個作用,乙個是提供給flex客戶端的介面用。乙個是作為包含多個service操作的統一介面。gof《設計模式》中說道:為子系統中的一組介面提供乙個一致的介面,facade模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。其實大多數人對於facade層的理解是為多個複雜的動作提供乙個入口。
來看乙個網上廣為流傳的例子:
比如有乙個抽屜,裡面存放了很大的重要檔案,我們稱這個抽屜為第二個抽屜,它的鑰匙放在另乙個抽屜,我們稱之為第乙個抽屜,只有拿到第乙個抽屜裡的鑰匙,才能開啟第二個抽屜。
package com.howlaa.facademode;
/** * 抽屜一
* @author howlaa
*/public class drawerone
public string getkey()
}
package com.howlaa.facademode;
/** * 抽屜二
* @author howlaa
*/public class drawertwo else
} public void getfile()
}
現在我們來看下,當不使用facade模式時,客戶端如果使用者想拿到這個重要檔案是怎樣的:
package com.howlaa.facademode;
import org.junit.test;
/** * 客戶端
* @author howlaa
* */
public class client
/*-------end 未使用facade模式---------*/
}
可以看到,使用者必須先去開啟第乙個抽屜,才能用這個鑰匙去開啟第二個抽屜。在實際中,可能使用者不知道這個必要條件。他只知道他需要的就是開啟抽屜,然後拿到檔案。我們來看下使用facade模式時的狀況:
首先,我們需要新建乙個facade類:
package com.howlaa.facademode;
public class drawe***cade
}
然後看下客戶端的操作:
package com.howlaa.facademode;
import org.junit.test;
/** * 客戶端
* @author howlaa
* */
public class client
/*--------end 使用facade模式----------*/
}
這裡可以看到,客戶端的使用者只是做了開啟,拿檔案的操作。服務端怎麼操作的,他無須關心。
Java設計模式之Facade模式
網上很少有facade模式的例子,傳的最多的就是那個jdbc的例子,不過這個例子我看著憋的慌,為什麼?看不懂,我覺得文章不全,不知道怎麼的就出來了prep 和 mysql兩個類,從頭到尾都沒看到定義,但是很多 都有這個例子,難道大家就沒考慮一下這個例子對不對就 嗎?這不是太不負責任了嗎?我還是自己寫...
設計模式之Facade
facade模式的定義 為子系統中的一組介面提供乙個一致的介面.facade乙個典型應用就是資料庫jdbc的應用,如下例對資料庫的操作 public class dbcompare connection conn null preparedstatement prep null resultset ...
設計模式之Facade
facade模式的定義 為子系統中的一組介面提供乙個一致的介面.facade乙個典型應用就是資料庫jdbc的應用,如下例對資料庫的操作 public class dbcompare catch ception e finally 上例是jsp中最通常的對資料庫操作辦法.在應用中,經常需要對資料庫操作...