1. 程式人生 > >物件導論系列---每個物件都提供服務

物件導論系列---每個物件都提供服務

物件導論系列---每個物件都提供服務

將物件作為服務提供者來看待是一件偉大的簡化工具,這不僅在設計過程中非常有用,而且當其他人試圖理解你的程式碼或重用某個物件時,如果他們看出了這個物件所能提供的服務的價值,他會使調整物件以適應其設計過程變得簡單得多。

 

當你正在試圖開發或理解一個程式設計時,最好的方法之一就是將物件想像為“服務提供者”,程式本身將向用戶提供服務,她將通過呼叫其它物件提供的服務來實現這一目的。你的目標就是去建立或者最好是在現有程式碼庫中去尋找能夠提供理想服務來解決問題的一系列物件。物件的“單一職責”是程式設計的基本要求之一,所以解決某個問題需要一系列物件。Java

中非常重要的體系,如:IO系、容器系、多執行緒系、Socket系。。。她們都是有多個物件,並通過物件組合來解決複雜功能。體現了設計的核心:擴充套件性、靈活性、維護性。

 

將物件看作是服務提供者還有一個附帶好處:她有助於提高物件的內聚性。高內聚是軟體設計的基本要求之一:這意味著一個軟體構件(例如一個物件,當然她也有可能是指一個方法或一個物件系)的各個方面“組合”的很好。初、中級設計人員在設計物件時所面臨的一個問題是,將過多的功能都塞在一個物件中。在良好的面向物件設計中,每個物件都可以很好地完成一項任務,但是她並不試圖做更多的事。

 

生產-消費模型:

生產-消費模型使用的場景非常多,直譯場景就是:工廠

-代理商,超市-顧客等,在Java大型異構系統(分散式)中,非常重要的訊息中介軟體就是這種模型,其中有:生產訊息服務提供者、消費訊息服務提供者、存放訊息服務提供者、維護訊息服務提供者、訊息實體服務提供者。

生產訊息服務提供者:見名知意,職責就是生產訊息;

消費訊息服務提供者:見名知意,職責就是消費訊息;

存放訊息服務提供者:主要是負責存放生產出來的訊息,類似於倉庫。倉庫是有容量的,所以還應該提供容量限制;

維護訊息服務提供者:主要負責訊息的維護,如:消費過的訊息會有標籤,這個服務會統一定時去清理;因為訊息生產和訊息是不對等,即不是生產出來必須立刻消費掉(M---N),

所以還應提供LRU規則,即生產出來很長時間沒用,如果容量達到最大,這個服務要定時按照

LRU規則進行清理,騰出空間供新生產出來的訊息“入庫”。

訊息實體服務提供者:定義訊息結構,並提供是否消費標籤,以供訊息維護服務來定時清理;

案例賞析:

 

(生產者:提供生產服務行為)

 

 

(消費者:提供消費服務行為)

 

 

(訊息實體:提供定義訊息實體、獲取編號、主題、訊息、設定是否消費等服務)

 

(訊息倉庫:提供訊息入庫、出庫、是否超容量、當前容量等服務)

 

總結:所有的抽象都是用“每個物件都提供服務”的思想來設計生產-消費模式,雖然此模式還不完善,但是基本功能都有。並且每個物件都提供單一職責功能,符合面向物件設計的單一職責思想。

如果同學們有疑問或者想獲取更多資源,可以加“張無忌”老師微信(17091005779),找老師獲取。