java設計模式之Facade模式

2021-06-18 19:01:03 字數 1497 閱讀 1220

關於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中最通常的對資料庫操作辦法.在應用中,經常需要對資料庫操作...