設計模式之略見一斑 外觀模式Facade

2021-08-25 01:22:47 字數 1516 閱讀 6854

外觀模式又稱門面模式,它是為了給子系統中提供乙個一致的介面,從面定義了乙個高層介面 ,這個介面使得這一子系統更加容易使用。定義中提到的子系統指在設計中為了降低複雜性根據一定的規則,對系統進行的劃分,子系統封裝有一些類,客戶程式在使用子系統的時候,可能會像下圖一樣零亂。

上面的實現中,客戶緊緊依賴在子系統的實現,如果子系統發生了變化,極有可能響應到客戶類的呼叫,而且在子系統在不斷優化時會產生更多的小類。

外觀模式就是為了解決這種問題而產生的,下面是使用了門用模式後的圖

這樣就明顯減少了客戶程式和子系統之間的偶合,增加了可維護性。

例子:

資料庫連線這個例子在我們日常中很常用,在用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

建造模式是將複雜的內部建立封裝在內部,對於外部呼叫的人來說,只需要傳入建造者和建造工具,對於內部是如何建造成成品的,呼叫者無需關心。建造模式很象抽象工廠模式,細微的區別的大概只有在反覆使用的方能體會。舉個簡單的例子,如汽車,有很多部件,車輪,方向盤,發動機還有各種小零件等等,部件很多,但遠不止這些,...