Foreword 抽象和接口是Java中的兩個(gè)關(guān)鍵字,也是兩種最基本的優(yōu)化軟件項(xiàng)目手段。為什么說它們是一種優(yōu)化項(xiàng)目的手段? 人分三六九等,不同等級(jí)的人,所接觸的事和處理的事是不一樣的。同理,項(xiàng)目也分大項(xiàng)目和中項(xiàng)目和小項(xiàng)目,大、中、小項(xiàng)目所承載的目標(biāo)也是不一樣的。 先說小項(xiàng)目,如果你使用Java只是寫
抽象和接口是Java中的兩個(gè)關(guān)鍵字,也是兩種最基本的優(yōu)化軟件項(xiàng)目手段。為什么說它們是一種優(yōu)化項(xiàng)目的手段?
人分三六九等,不同等級(jí)的人,所接觸的事和處理的事是不一樣的。同理,項(xiàng)目也分大項(xiàng)目和中項(xiàng)目和小項(xiàng)目,大、中、小項(xiàng)目所承載的目標(biāo)也是不一樣的。
先說小項(xiàng)目,如果你使用Java只是寫一個(gè)小腳本,比如更新一下系統(tǒng)時(shí)間,自動(dòng)點(diǎn)擊某個(gè)軟件按鈕,修改表格數(shù)據(jù)...類似這樣的功能。對(duì)于這種小項(xiàng)目,項(xiàng)目里無(wú)非三、兩個(gè)功能函數(shù),有個(gè)Main按照順序調(diào)用一下即可,那么這種項(xiàng)目就永遠(yuǎn)都不需要使用到抽象和接口。用了反而是累贅,有畫蛇添足的味道。
但是對(duì)于大項(xiàng)目就不同了,比如一個(gè)大型的電商系統(tǒng),用戶的需求多、使用人群廣、數(shù)據(jù)類型多且需要一定關(guān)聯(lián)度。商品種類多、店鋪的類型各異...,當(dāng)然這些都是在系統(tǒng)設(shè)計(jì)階段的麻煩。在開發(fā)階段的麻煩是,不同項(xiàng)目組的人都做不同的模塊,一個(gè)項(xiàng)目組的人怎么配合也是麻煩,最后數(shù)據(jù)對(duì)接起來(lái)也是麻煩、前后端之間的數(shù)據(jù)對(duì)接...,怎么樣,想想都頭疼了吧。
為什么說有了抽象和接口,能給大型項(xiàng)目帶來(lái)便利、優(yōu)化?
一些前人留下了一些經(jīng)典的設(shè)計(jì)模式,比如單一模式,指在設(shè)計(jì)的時(shí)候要保證類的單一功能,如果完全按照這種模式,那么業(yè)務(wù)的實(shí)現(xiàn)會(huì)變成無(wú)數(shù)個(gè)類,并且代碼間非常耦合,在修改業(yè)務(wù)需求和代碼的時(shí)候,都是一場(chǎng)災(zāi)難。
接口則是解耦的最基本工具,接口允許將方法的定義與其實(shí)現(xiàn)分開,這種分離使得多個(gè)不相關(guān)的類能夠?qū)崿F(xiàn)同一組方法,從而保證了項(xiàng)目中不同部分之間的相互通信。
抽象類非常適合多個(gè)子類共享共同特征和屬性,但也兼容自己獨(dú)有的行為情況,同時(shí)為子類的定制實(shí)現(xiàn)留出空間。
這個(gè)現(xiàn)象讓我想到對(duì)有序數(shù)組的排序:
就類似對(duì)有序數(shù)組進(jìn)行排序,使用冒泡排序和二分查找算法去實(shí)現(xiàn),雖然都能完成這個(gè)效果。但是它們的時(shí)間復(fù)雜度差異也很大,差了一個(gè)數(shù)量級(jí)。
同樣的,你不使用抽象和對(duì)象也一樣能實(shí)現(xiàn)大型項(xiàng)目,但是效果不一樣,在管理的復(fù)雜度上也不一樣。
如果說冒泡和二分體現(xiàn)的差異在時(shí)間和空間上。那么設(shè)計(jì)不合理的項(xiàng)目,就體現(xiàn)在在代碼的工作量上。
當(dāng)然,項(xiàng)目中增加了抽象和接口,新人的理解難度也直線上升,這也逼迫這個(gè)項(xiàng)目的程序員都必須得安裝OOP思想,才能上手這種項(xiàng)目。
小編推薦閱讀如何使用 Pytorch 中的 DataSet 和 DataLoader
閱讀golang slice相關(guān)常見的性能優(yōu)化手段
閱讀連接Elasticsearch服務(wù)器的Python代碼示例
閱讀國(guó)產(chǎn)操作系統(tǒng)上實(shí)現(xiàn)RTMP推流攝像頭視頻和麥克風(fēng)聲音到流媒體服務(wù)器
閱讀使用Python讀取和導(dǎo)出NetCDF格式的多時(shí)相柵格文件
閱讀多租戶系統(tǒng)數(shù)據(jù)權(quán)限設(shè)計(jì)與RuoYi系統(tǒng)的借鑒
閱讀count(*)、count(1)哪個(gè)更快?面試必問:通宵整理的十道經(jīng)典MySQL必問面試題
閱讀從需求分析、產(chǎn)品設(shè)計(jì)到部署交付各階段說明
閱讀如何利用七牛云進(jìn)行數(shù)據(jù)備份和刪除
閱讀強(qiáng)化學(xué)習(xí)筆記之【ACE:Off-PolicyActor-CriticwithCausality-AwareEntropyRegularization】
閱讀使用MailKit在.NET Core中收發(fā)郵件的完整示例
閱讀WiFi基礎(chǔ)(六):天線基礎(chǔ)知識(shí)
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]
湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2024 haote.com 好特網(wǎng)