更新時間:2020-10-15 17:18:30 來源:動力節(jié)點 瀏覽1196次
面向?qū)ο蟪绦蛟O(shè)計是當今主流的程序設(shè)計范型,已經(jīng)取代了早期的“結(jié)構(gòu)化”過程化程序設(shè)計開發(fā)技術(shù),java是完全面向?qū)ο蟮挠嬎銠C語言,要使用面向?qū)ο笫絹碓O(shè)計java程序。在前面我們學(xué)習了面向?qū)ο蟪绦蛟O(shè)計的整個思想與概述,另外還需要知道面向?qū)ο笤O(shè)計原則是什么,這樣才能用java語言寫出程序。
面向?qū)ο笤O(shè)計原則一共有七個,包括:開閉原則、里氏替換原則、依賴倒轉(zhuǎn)原則、單一職責原則、接口隔離原則、組合/聚合復(fù)用原則、迪米特法則。下面分別來介紹這七大面向?qū)ο笤O(shè)計原則:
1、開閉原則
面向?qū)ο罂蓮?fù)用設(shè)計原則中最基礎(chǔ)的原則便是開閉原則,開閉原則指的是在設(shè)計一個對象(類、模塊、函數(shù))時,應(yīng)遵循或做到對擴展開放、對修改關(guān)閉,其核心思想是面向接口/抽象進行編程。系統(tǒng)的抽象化設(shè)計,是開放關(guān)閉原則的關(guān)鍵。可以通過接口、抽象類定義系統(tǒng)的抽象層,通過實現(xiàn)類進行擴展,增加新功能只需增加新的實現(xiàn)類,而無需修改抽象層,從而實現(xiàn)在不修改已有代碼的情況下實現(xiàn)系統(tǒng)擴展。
2、里氏替換原則
里氏替換原則要求設(shè)計一個對象時,代碼中任何父類對象可以出現(xiàn)的地方,子類都可以出現(xiàn),即可以使用子類來代替父類。實現(xiàn)開閉原則的核心思想是面向接口/抽象進行編程,其關(guān)鍵步驟是抽象化,而父類和子類的繼承關(guān)系就是抽象化的具體體現(xiàn),所以里氏替換原則是對實現(xiàn)抽象化的具體步驟的規(guī)范,它是對開閉原則的補充。
3、依賴倒轉(zhuǎn)原則
依賴倒轉(zhuǎn)原則指程序中要依賴抽象(接口/抽象類)而不是具體的實現(xiàn)(實現(xiàn)類)進行編程,即面向接口/抽象進行編程,這樣可以最大程度降低模塊之間的耦合。比如訂單服務(wù)中,會調(diào)用(依賴)支付服務(wù)以完成訂單的支付。此時的訂單服務(wù)實現(xiàn)類代碼中,聲明或持有的應(yīng)該是一個支付服務(wù)PayService接口,而不是具體實現(xiàn)類比如Alipay或WeChatPay,所有需要用到支付服務(wù)的地方,調(diào)用的都是PayService接口變量,即代碼中都是接口,等到在運行時才實例化或注入具體的實現(xiàn)類,編寫代碼時不需要關(guān)心具體實現(xiàn)類,也就是面向接口/抽象編程。這樣,在應(yīng)用程序擴展或集成新的支付服務(wù)時,原來的訂單服務(wù)代碼可以不需要進行修改任何代碼,這樣也就符合了開閉原則。
4、單一職責原則
一個類只負責一個功能領(lǐng)域中的相應(yīng)職責。就一個類而言,應(yīng)該只有一個引起它變化的原因。不同的類具備不同的職責,各司其職,有以下優(yōu)點:(1)可以降低類的復(fù)雜度,一個類只負責一項職責,其邏輯肯定要比負責多項職責簡單的多;(2)類的可讀性高,進而可以提高系統(tǒng)的可維護性;(3)變更引起的風險降低,變更是必然的,如果單一職責原則遵守的好,當修改一個功能時,可以顯著降低對其他功能的影響。單一職責原則是最簡單但又最難運用的原則,難點在于職責和粒度劃分。一個類往往具有多重職責,而發(fā)現(xiàn)類的多重職、職責粒度拆分的大小需要要設(shè)計人員具有較強的分析設(shè)計能力和相關(guān)實踐經(jīng)驗。
5、接口隔離原則
接口隔離原則指設(shè)計時不同的功能應(yīng)定義在不同的接口上,避免實現(xiàn)類依賴不需要的接口,換個角度理解就是一個類應(yīng)該依賴盡量少的接口或?qū)崿F(xiàn)類,減少程序的冗余性和復(fù)雜性。在使用接口隔離原則時,我們需要注意控制接口的粒度,接口不能太小,如果太小會導(dǎo)致系統(tǒng)中接口泛濫,不利于維護;接口也不能太大,太大的接口將違背接口隔離原則,靈活性較差,使用起來很不方便。一般而言,接口中僅包含為某一類用戶定制的方法即可,不應(yīng)該強迫客戶依賴于那些它們不用的方法。
6、組合/聚合復(fù)用原則
組合/聚合復(fù)用原則也叫做合成復(fù)用原則,它指在一個新的對象中引入/注入現(xiàn)有的對象以達到功能復(fù)用和擴展的目的。簡單講就是盡量使用組合/聚合而不要使用繼承。
7、迪米特法則
迪米特法則指設(shè)計一個對象時,盡可能少的與其它對象發(fā)生相互作用,即盡可能少的了解或依賴其它對象,降低耦合度。廣義的迪米特法則,在類設(shè)計的具體操作上,主要通過以下三點來體現(xiàn):(1)優(yōu)先考慮將一個類設(shè)置為final不變類;(2)盡量降低一個類及其成員變量的訪問權(quán)限;(3)謹慎使用序列化.
希望上面對面向?qū)ο笤O(shè)計原則的介紹可以幫助到大家,尤其是希望java零基礎(chǔ)的朋友們對面向?qū)ο蟾钊氲睦斫狻J炀氄莆掌叽竺嫦驅(qū)ο笤O(shè)計原則是初級java程序員向中高級程序員進階的基礎(chǔ),應(yīng)用好面向?qū)ο笤O(shè)計原則可以提升程序的可復(fù)用性和可維護性,也是重構(gòu)代碼的一大利器。
初級 202925
初級 203221
初級 202629
初級 203743