tomcat 中運用的許多經典設計模式,如模版模式、工廠模式和單例模式等。通過學習它們的實踐運用能給我們以後的軟體設計起到一定的借鑑作用。
門面設計模式
門面設計模式的原理
這麼多場合都用到了這種設計模式,那這種設計模式究竟能有什麼作用呢?顧名思義,就是將乙個東西封裝成乙個門面好與人家更容易進行交流,就像乙個國家的***一樣。
這種設計模式主要用在乙個大的系統中有多個子系統組成時,這多個子系統肯定要涉及到相互通訊,但是每個子系統又不能將自己的內部資料過多的暴露給其它系統,不然就沒有必要劃分子系統了。每個子系統都會設計乙個門面,把別的系統感興趣的資料封裝起來,通過這個門面來進行訪問。這就是門面設計模式存在的意義。
門面設計模式示意圖如下:
client 只能訪問到 façade 中提供的資料是門面設計模式的關鍵,至於 client 如何訪問 façade 和 subsystem 如何提供 façade 門面設計模式並沒有規定死。
tomcat 的門面設計模式示例
tomcat 中門面設計模式使用的很多,因為 tomcat 中有很多不同元件,每個元件要相互互動資料,用門面模式隔離資料是個很好的方法。
下面是 request 上使用的門面設計模式:
從圖中可以看出 httprequestfacade 類封裝了 httprequest 介面能夠提供資料,通過 httprequestfacade 訪問到的資料都被**到 httprequest 中,通常被封裝的物件都被設為 private 或者 protected 訪問修飾,以防止在 façade 中被直接訪問。
觀察者設計模式
這種設計模式也是常用的設計方法通常也叫發布 - 訂閱模式,也就是事件監聽機制,通常在某個事件發生的前後會觸發一些操作。
觀察者模式的原理
觀察者模式原理也很簡單,就是你在做事的時候旁邊總有乙個人在盯著你,當你做的事情是它感興趣的時候,它就會跟著做另外一些事情。但是盯著你的人必須要到你那去登記,不然你無法通知它。觀察者模式通常包含下面這幾個角色:
tomcat 中觀察者模式也有多處使用,前面講的控制項生命週期的 lifecycle 就是這種模式的體現,還有對 servlet 例項的建立、session 的管理、container 等都是同樣的原理。下面主要看一下 lifecycle 的具體實現。
lifecycle 的觀察者模式結構圖:
上面的結構圖中,lifecyclelistener 代表的是抽象觀察者,它定義乙個 lifecycleevent 方法,這個方法就是當主題變化時要執行的方法。 serverlifecyclelistener 代表的是具體的觀察者,它實現了lifecyclelistener 介面的方法,就是這個具體的觀察者具體的實現方式。lifecycle 介面代表的是抽象主題,它定義了管理觀察者的方法和它要所做的其它方法。而 standardserver 代表的是具體主題,它實現了抽象主題的所有方法。這裡 tomcat 對觀察者做了擴充套件,增加了另外兩個類:lifecyclesupport、lifecycleevent,它們作為輔助類擴充套件了觀察者的功能。lifecycleevent 使得可以定義事件類別,不同的事件可區別處理,更加靈活。lifecyclesupport 類**了主題對多觀察者的管理,將這個管理抽出來統一實現,以後如果修改只要修改 lifecyclesupport 類就可以了,不需要去修改所有具體主題,因為所有具體主題的對觀察者的操作都被**給 lifecyclesupport 類了。這可以認為是觀察者模式的改進版。
lifecyclesupport 呼叫觀察者的方法**如下:
清單 1. lifecyclesupport 中的 firelifecycleevent 方法
public void firelifecycleevent(string type, object data)
for (int i = 0; i < interested.length; i++)
interested[i].lifecycleevent(event); }
主題是怎麼通知觀察者呢?看下面**:
清單 2.容器中的 start 方法
public void start() throws lifecycleexception }
lifecycle.firelifecycleevent(after_start_event, null); }
Tomcat之設計模式
tomcat框架中設計到的設計模式包括 模板模式 工廠模式 單例模式 門面模式 觀察者模式 責任鏈模式 命令模式等,下面分別對這些設計模式做一些簡單的解釋。2 觀察者模式 原理是你做事的時候傍邊有人盯著,當你做的事情是他感興趣的時候,他就回跟著做別的事情,但是盯著你的人必須到你那裡登記,不然你無法通...
Tomcat中的設計模式 命令模式
前面把 tomcat 中兩個核心元件 connector 和 container,比作一對夫妻。男的將接受過來的請求以命令的方式交給女主人。對應到 connector 和 container,connector 也是通過命令模式呼叫 container 的。命令模式主要作用就是封裝命令,把發出命令的...
Tomcat中的設計模式 外觀模式 門店模式
這麼多場合都用到了這種設計模式,那這種設計模式究竟能有什麼作用呢?顧名思義,就是將乙個東西封裝成乙個門面好與人家更容易進行交流,就像乙個國家的 一樣。這種設計模式主要用在乙個大的系統中有多個子系統組成時,這多個子系統肯定要涉及到相互通訊,但是每個子系統又不能將自己的內部資料過多的暴露給其它系統,不然...