- Java核心編程
- 柳偉衛(wèi)
- 572字
- 2020-11-23 15:08:33
3.5 對象提供服務(wù)
當(dāng)設(shè)計(jì)一個程序時,需要將對象想象成一個服務(wù)的供應(yīng)商。對象提供服務(wù)給用戶,解決不同的問題。比如,在設(shè)計(jì)一個圖書管理軟件時,你可能設(shè)想一些對象包含了哪些預(yù)定義輸入,其他對象可能用于圖書的統(tǒng)計(jì),一個對象用于打印的校驗(yàn)等。這都需要將一個問題分解成一組對象。
將對象的思考作為服務(wù)供應(yīng)商有一個額外的好處:有助于改善對象的凝聚力。高內(nèi)聚(High cohesion)是軟件設(shè)計(jì)的基本質(zhì)量:這意味著,一個軟件組件的各方面(如對象,盡管這也可以適用于一個方法或一個對象的庫)“結(jié)合在一起”。在設(shè)計(jì)對象時經(jīng)常出現(xiàn)的問題是將太多的功能合并到一個對象里面。例如,在支票打印模塊,你可以決定你需要知道的所有有關(guān)格式和打印的對象。你可能會發(fā)現(xiàn),這對于一個對象來說有太多的內(nèi)容,你需要3個或3個以上的對象:一個對象用于查詢有關(guān)如何打印一張支票的信息目錄;一個對象(或一組對象)可以是知道所有不同類型的打印機(jī)的通用打印接口;第三個對象可以使用其他兩個對象的服務(wù)來完成任務(wù)。因此,每個對象都有一套它提供的有凝聚力的服務(wù)。在良好的面向?qū)ο笤O(shè)計(jì)中,每個對象都會做好一件事,但不會嘗試做太多。
將對象作為服務(wù)供應(yīng)商是一個偉大的簡化工具。這不僅在設(shè)計(jì)過程中是非常有用的,在別人試圖理解你的代碼或重用的對象時也很有用。如果能得知根據(jù)它提供什么樣的服務(wù)獲得對象的值,那么就可以更容易地在設(shè)計(jì)中使用它。
- Practical Internet of Things Security
- INSTANT Sencha Touch
- 名師講壇:Spring實(shí)戰(zhàn)開發(fā)(Redis+SpringDataJPA+SpringMVC+SpringSecurity)
- 自然語言處理Python進(jìn)階
- RSpec Essentials
- 零代碼實(shí)戰(zhàn):企業(yè)級應(yīng)用搭建與案例詳解
- Hacking Android
- Arduino電子設(shè)計(jì)實(shí)戰(zhàn)指南:零基礎(chǔ)篇
- Python預(yù)測之美:數(shù)據(jù)分析與算法實(shí)戰(zhàn)(雙色)
- 微前端設(shè)計(jì)與實(shí)現(xiàn)
- PHP動態(tài)網(wǎng)站開發(fā)實(shí)踐教程
- Android應(yīng)用開發(fā)攻略
- 你必須知道的.NET(第2版)
- CISSP in 21 Days(Second Edition)
- Ajax與jQuery程序設(shè)計(jì)