在許多開源的框架中都充分的利用了設計模式這一概念,struts典型的mvc模式的化身,spring是工廠模式和單例模式的充分體現。在專案開發中,能充分利用設計模式的思想來考慮問題,來解決問題,來通過**去實現。不但可以提高**的質量,對程式的擴充套件,重用帶來很大方便。其實我們專案中用設計模式程式設計就是加了乙個封裝層,減少客戶必須處理的物件的數量。
在設計模式中一般都遵循這樣的原則:
(1)按介面程式設計。
(2)盡量用聚合代替繼承。
(3)找出變化並封裝之。
上面主要講了一些設計模式的作用和原則。接下來我要講的是在實際專案中應用的比較多的其中乙個模式----->門面模式(facade),有的叫正面,外觀模式,其實都是乙個意識,都指的這個模式。它也是美國著名的四人幫(gof)寫的23種模式之一。
簡單的理解:我們需要用一種比原有的方法更簡單的方法與系統互動,或者說,我們需要以一種特殊的方式使用系統。主要是為子系統中的一組介面提供乙個統一的介面。facade模式定義了乙個更高的介面,使子系統更加容易使用。它的意圖要求乙個一致的高層介面。
我簡單的用**方式表現出來。我寫的都是一些偽**。主要是來講清facade的應用。
以簡單的登入為例:
我們一般都會寫乙個dao層,主要封裝了資料庫裡增,刪,該,查作用。
我們一般會寫乙個介面:簡單宣告乙個方法。根據使用者名稱和密碼來從資料庫中查詢是否存在。
public inte***ce userdao
然後再寫乙個介面的實現:
public class userdaoimp implements w3cstuserdao
public list findbyusername(object username)
public list findbyuserpassword(object userpassword)
public list findbyuserportraiturl(object userportraiturl)
public list findbyemail(object email)
public list findbyurl(object url)
public list findbyrole(object role)
} 我們一般應用門面模式是在業務層。我們在寫乙個業務方法:和上面一樣先宣告乙個介面。
public inte***ce userservice
在寫乙個業務介面的實現。
public class userserviceimp implements userservice
public userdao getuserdao()
public boolean login(stirng username,string password)else }
}我們可以看到我們在業務層中對dao層又進行了一層封裝。這就是facade模式的簡單應用的場合,有人可能會想為什麼不直接呼叫dao層呢?因為在實際的應用中,也許dao中的方法太多,而我們實際用到的方法只是其中的乙個或幾個,所有把業務中用到的方法在提出出來封裝處理,對呼叫者來說也很方便,它不會直接接觸到dao,我們把dao封裝在service層中是為了讓各個層職責分明。這樣做還有乙個用處,我們可能還會對使用者的登入資訊進行記錄,這是我們就可以在service層中處理,以及事務等。之所以把它封裝在業務層中,避免了使用者直接對資料庫dao層的直接操作,對使用者來說是透明的。這樣就簡單了實現了松耦合。
facade模式可以應用於:
<1>不需要使用乙個複雜系統的所有功能,而且可以建立乙個新的類,包含訪問系統的所用規則。如果只需要使用系統的部分功能,那麼你為新類建立的api將比原有系統的api簡單的多。
<2>希望封裝或者隱藏原系統。
<3>希望使用原系統的功能,而且還希望增加一些附件功能。
設計模式之門面模式
coding gbk coding utf 8 author edgar 這是門面模式的乙個應用場景。具體故事情節請見 設計模式之禪 門面模式把一套方法封裝起來,使用者不需要知道具體的實現細節。class letterprocessimpl object def writecontext self,...
設計模式之門面模式
模式定義 為子系統中的一組介面提供乙個統一的高層介面,使子系統更容易使用。該模式通過外觀介面與子系統 互動,而不與具體的子系統中的細節互動。分層結構 mvc web應用中的三層結構 遵循原則 迪公尺特原則 最少知識原則,你不需要知道的你就不要知道,你知道幹什麼?封裝變化部分。適用場合 1 乙個系統複...
設計模式之門面模式
外觀模式定義了乙個高層介面,讓子系統更容易使用 結構性場景 有個 允許使用者用自己的積分來兌換商店內禮物,兌換需要經過校驗積分,支付積分,生成訂單的過程,單對呼叫兌換積分的介面來說不用關心裡面的三個過程,只需關心呼叫兌換積分的介面 新建積分兌換禮物實體類 package com.tangbaobao...