??單一職責(zé)原則
????????單一職責(zé)原則告訴我們一個類應(yīng)該只有一個責(zé)任或者只負(fù)責(zé)一件事情。
????????想象一下,如果一個類承擔(dān)了太多的責(zé)任,就像一個人同時負(fù)責(zé)做飯、洗衣服和打掃衛(wèi)生一樣,那么這個類會變得非常復(fù)雜,難以理解和維護(hù)。而且,當(dāng)需要修改其中一個功能時,可能會影響到其他功能,導(dǎo)致意想不到的問題。
????????通過遵循單一職責(zé)原則,我們可以將一個復(fù)雜的類拆分成多個小的、具有獨(dú)立職責(zé)的類。每個類只關(guān)注自己的職責(zé),這樣代碼會更加清晰、易于理解和修改。
????????舉個例子,假設(shè)我們有一個User類,它既負(fù)責(zé)用戶的登錄驗(yàn)證,又負(fù)責(zé)用戶信息的管理。按照單一職責(zé)原則,我們可以將這個類拆分成兩個類:一個負(fù)責(zé)用戶的登錄驗(yàn)證,另一個負(fù)責(zé)用戶信息的管理。這樣,當(dāng)我們需要修改登錄驗(yàn)證邏輯時,就不會影響到用戶信息的管理部分。
????????總結(jié)起來,單一職責(zé)原則的核心思想是:一個類應(yīng)該只有一個責(zé)任,這樣可以提高代碼的可讀性、可維護(hù)性和可擴(kuò)展性。
??里氏替換原則
????????里氏替換原則指導(dǎo)我們?nèi)绾卧O(shè)計和使用繼承關(guān)系。簡單來說,里氏替換原則告訴我們,子類對象可以替換父類對象出現(xiàn)在任何能使用父類對象的地方,而不會產(chǎn)生錯誤或者破壞程序的正確性。
????????舉個例子,假設(shè)有一個動物類Animal,其中有一個方法叫做makeSound(),用于發(fā)出動物的聲音。然后我們派生出了兩個子類Cat和Dog,它們都繼承自Animal類。按照里氏替換原則,我們可以在任何需要Animal對象的地方使用Cat或Dog對象,比如調(diào)用makeSound()方法。
????????具體到代碼實(shí)現(xiàn)上,如果Cat和Dog類分別實(shí)現(xiàn)了自己的makeSound()方法,那么無論是Animal類型的變量還是Cat、Dog類型的變量,都可以調(diào)用makeSound()方法,而且得到的結(jié)果應(yīng)該符合預(yù)期。
????????總結(jié)起來,里氏替換原則的核心思想是:子類對象應(yīng)該能夠替換父類對象,而不會引起任何錯誤或異常。這樣設(shè)計出來的代碼更加靈活、可擴(kuò)展,并且易于維護(hù)。
??開閉原則
????????開閉原則告訴我們軟件實(shí)體(類、模塊、函數(shù)等)應(yīng)該對擴(kuò)展開放,對修改關(guān)閉。
????????開閉原則的核心思想是:當(dāng)需要改變一個系統(tǒng)的行為時,我們應(yīng)該盡量通過添加新的代碼來實(shí)現(xiàn),而不是修改已有的代碼。這樣做的好處是,我們可以保持已有的代碼穩(wěn)定性,減少引入新錯誤的風(fēng)險。
????????舉個例子,假設(shè)我們有一個電商網(wǎng)站,其中有一個購物車類Cart,用于管理用戶的購物車信息?,F(xiàn)在,我們需要添加一個新的功能,比如優(yōu)惠券折扣。按照開閉原則,我們應(yīng)該創(chuàng)建一個新的類DiscountCoupon,并且讓它負(fù)責(zé)計算折扣金額。然后,在Cart類中,我們可以通過調(diào)用DiscountCoupon類的方法來獲取折扣金額,而不是直接修改Cart類的代碼。
????????這樣做的好處是,如果以后我們需要添加其他類型的折扣,比如滿減或者贈品,我們只需要創(chuàng)建相應(yīng)的類,并且確保它們都符合同一個抽象接口。這樣,我們可以輕松地擴(kuò)展系統(tǒng)的功能,而不需要修改已有的代碼。
????????總結(jié)起來,開閉原則的目標(biāo)是讓我們能夠通過擴(kuò)展來改變一個系統(tǒng)的行為,而不需要修改已有的代碼。這樣可以提高代碼的穩(wěn)定性、可維護(hù)性和可擴(kuò)展性。
??依賴倒轉(zhuǎn)原則
????????依賴倒轉(zhuǎn)原則告訴我們高層模塊不應(yīng)該依賴于低層模塊,而是應(yīng)該依賴于抽象。
????????通俗地說,依賴倒轉(zhuǎn)原則就是要求我們在設(shè)計代碼時,盡量使用抽象類或者接口來進(jìn)行編程,而不是直接依賴具體的實(shí)現(xiàn)類。這樣做的好處是,可以降低模塊之間的耦合度,提高代碼的靈活性和可維護(hù)性。
????????舉個例子,假設(shè)我們有一個電商網(wǎng)站,其中有一個Order類用于處理訂單相關(guān)的邏輯。按照依賴倒轉(zhuǎn)原則,我們應(yīng)該定義一個抽象的Payment接口,然后讓Order類依賴于這個接口。具體的支付方式,比如支付寶、微信支付等,都應(yīng)該實(shí)現(xiàn)這個接口,并且提供自己的具體實(shí)現(xiàn)。
????????這樣做的好處是,當(dāng)我們需要更換支付方式時,比如從支付寶切換到微信支付,我們只需要創(chuàng)建一個新的實(shí)現(xiàn)類,并且修改配置文件或者注入相應(yīng)的實(shí)例即可,而不需要修改Order類的代碼。這樣,我們可以輕松地擴(kuò)展和變更系統(tǒng)的功能,而不會對其他模塊產(chǎn)生影響。
????????總結(jié)起來,依賴倒轉(zhuǎn)原則的核心思想是:高層模塊不應(yīng)該依賴于低層模塊,而是應(yīng)該依賴于抽象。通過使用抽象類或者接口來編程,可以降低模塊之間的耦合度,提高代碼的靈活性和可維護(hù)性。
??接口隔離原則
????????接口隔離原則告訴我們客戶端不應(yīng)該依賴于它不需要的接口。
????????通俗地說,接口隔離原則就是要求我們將龐大而臃腫的接口拆分成更小、更具體的接口,以滿足客戶端的精確需求。這樣做的好處是,可以降低客戶端與接口之間的耦合度,提高代碼的靈活性和可維護(hù)性。
????????舉個例子,假設(shè)我們有一個電商網(wǎng)站,其中有一個Product類用于處理商品相關(guān)的邏輯。按照接口隔離原則,我們應(yīng)該將Product類的接口拆分成多個更小的接口,比如IProductInfo和IProductReview。這樣,客戶端只需要依賴于它們所需的接口,而不需要依賴整個Product類的接口。
????????這樣做的好處是,當(dāng)我們需要在客戶端中使用商品信息時,只需要實(shí)現(xiàn)IProductInfo接口即可,而不需要關(guān)心其他不需要的方法。同樣,當(dāng)我們需要在客戶端中使用商品評價時,只需要實(shí)現(xiàn)IProductReview接口即可。
????????通過接口隔離原則,我們可以避免客戶端依賴于不需要的接口,減少了對無用方法的依賴,提高了代碼的可讀性和可維護(hù)性。同時,接口隔離原則也促進(jìn)了代碼的復(fù)用,因?yàn)槲覀兛梢愿鶕?jù)需要選擇實(shí)現(xiàn)不同的接口。
總結(jié)起來,接口隔離原則的核心思想是:客戶端不應(yīng)該依賴于它不需要的接口。通過拆分龐大的接口,只提供客戶端所需的精確接口,可以降低耦合度,提高代碼的靈活性和可維護(hù)性。
??迪米特法則
????????迪米特法則,也被稱為最少知識原則,它告訴我們一個對象應(yīng)該盡量減少與其他對象之間的交互,只與直接的朋友進(jìn)行通信。
????????通俗地說,迪米特法則就是要求我們在設(shè)計代碼時,盡量降低對象之間的耦合度,避免一個對象過多地了解其他對象的內(nèi)部細(xì)節(jié)。這樣做的好處是,可以提高代碼的可維護(hù)性和靈活性,減少對其他對象的依賴。
????????舉個例子,假設(shè)我們有一個電商網(wǎng)站,其中有一個Order類用于處理訂單相關(guān)的邏輯。按照迪米特法則,我們應(yīng)該盡量減少Order類與其他類的直接交互,只與必要的對象進(jìn)行通信,比如與Product類、Payment類等直接相關(guān)的對象。
????????這樣做的好處是,當(dāng)需要修改或者擴(kuò)展系統(tǒng)的某個功能時,我們只需要關(guān)注與之直接相關(guān)的對象,而不需要考慮其他無關(guān)的對象。這樣可以降低代碼的復(fù)雜度,提高代碼的可讀性和可維護(hù)性。
????????另外,迪米特法則還鼓勵使用中間對象來協(xié)調(diào)其他對象之間的交互,以減少對象之間的直接依賴關(guān)系。這樣可以提高系統(tǒng)的靈活性,降低耦合度。
????????總結(jié)起來,迪米特法則的核心思想是:一個對象應(yīng)該盡量減少與其他對象之間的交互,只與直接的朋友進(jìn)行通信。通過降低對象之間的耦合度,可以提高代碼的可維護(hù)性和靈活性,減少對其他對象的依賴。
??合成復(fù)用原則
????????合成復(fù)用原則告訴我們在設(shè)計代碼時,應(yīng)該優(yōu)先使用組合(composition)而不是繼承(inheritance)來實(shí)現(xiàn)復(fù)用。
????????通俗地說,合成復(fù)用原則就是要求我們通過將已有的類組合起來,構(gòu)建新的類來實(shí)現(xiàn)復(fù)用,而不是通過繼承已有的類。這樣做的好處是,可以減少類之間的耦合度,提高代碼的靈活性和可維護(hù)性。
????????舉個例子,假設(shè)我們有一個電商網(wǎng)站,其中有一個Order類用于處理訂單相關(guān)的邏輯。按照合成復(fù)用原則,我們應(yīng)該優(yōu)先使用組合來實(shí)現(xiàn)訂單的功能,而不是通過繼承已有的類。
????????具體來說,我們可以定義一個Order類,然后在該類中使用其他已有的類,比如Product類和Payment類,作為其成員變量。這樣,Order類就可以通過調(diào)用這些成員變量的方法來實(shí)現(xiàn)自己的功能,而不需要繼承這些類。
????????這樣做的好處是,當(dāng)我們需要修改或者擴(kuò)展系統(tǒng)的某個功能時,只需要關(guān)注與之相關(guān)的類,而不需要影響到其他類。同時,由于使用了組合而不是繼承,我們可以更加靈活地選擇和替換成員變量,以滿足不同的需求。文章來源:http://www.zghlxwxcb.cn/news/detail-649217.html
總結(jié)起來,合成復(fù)用原則的核心思想是:優(yōu)先使用組合而不是繼承來實(shí)現(xiàn)復(fù)用。通過將已有的類組合起來構(gòu)建新的類,可以降低耦合度,提高代碼的靈活性和可維護(hù)性。文章來源地址http://www.zghlxwxcb.cn/news/detail-649217.html
到了這里,關(guān)于設(shè)計模式之七大原則的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!