某一个接口403 其他接口可以调通_设计模式HR:不会设计模式,你来面什么试?你以为设计模式只有23种?(真正的入门到精通可以用到入土)...
設(shè)計(jì)模式(Design pattern)代表了最佳的實(shí)踐,通常被有經(jīng)驗(yàn)的面向?qū)ο蟮能浖_發(fā)人員所采用。設(shè)計(jì)模式是軟件開發(fā)人員在軟件開發(fā)過程中面臨的一般問題的解決方案。這些解決方案是眾多軟件開發(fā)人員經(jīng)過相當(dāng)長的一段時(shí)間的試驗(yàn)和錯(cuò)誤總結(jié)出來的?.?設(shè)計(jì)模式是一套被反復(fù)使用的、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。?.?毫無疑問,設(shè)計(jì)模式于己于他人于系統(tǒng)都是多贏的,設(shè)計(jì)模式使代碼編制真正工程化,設(shè)計(jì)模式是軟件工程的基石,如同大廈的一塊塊磚石一樣。項(xiàng)目中合理地運(yùn)用設(shè)計(jì)模式可以完美地解決很多問題,每種模式在現(xiàn)實(shí)中都有相應(yīng)的原理來與之對應(yīng),每種模式都描述了一個(gè)在我們周圍不斷重復(fù)發(fā)生的問題,以及該問題的核心解決方案,這也是設(shè)計(jì)模式能被廣泛應(yīng)用的原因。?. ==我們不只是講GOF所提到的23種設(shè)計(jì)模式,我們也要講一些Headfirst提到一些新的設(shè)計(jì)模式和一些額外的,在應(yīng)用中用的比較普遍的設(shè)計(jì)模式。==
推薦書籍
沒恰飯,這些是我看完或者在看到書,都是一些經(jīng)典書目了,另外雖有有PDF建議大家還是入手一本。
《Design Patterns: Elements of Reusable Object-Oriented Software》 由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著(Addison-Wesley,1995)。這幾位作者常被稱為"四人組(Gang of Four)就是大名鼎鼎的GOF"
《Head First 設(shè)計(jì)模式》 本書作者Eric Freeman,是作家、講師和技術(shù)顧問。完整地涵蓋了四人組版本全部23個(gè)設(shè)計(jì)模式,并介紹如何將兩個(gè)以上的設(shè)計(jì)模式結(jié)合起來成為新的設(shè)計(jì)模式(例如著名的MVC模式),以及介紹如何進(jìn)一步學(xué)習(xí)設(shè)計(jì)模式,如何發(fā)覺新的設(shè)計(jì)模式等。
《大話設(shè)計(jì)模式》 作者是程杰,本書中以情景對話的形式,用多個(gè)小故事或編程示例來組織講解GoF總結(jié)的23個(gè)設(shè)計(jì)模式,開創(chuàng)了國內(nèi)設(shè)計(jì)模式通俗讀物的先河。用C#寫的代碼, 雖然感覺有些文章確實(shí)太牽強(qiáng),但是覺得前兩者太枯燥的話,看看這個(gè)也是挺不錯(cuò)的。(并不是說著這本書不好,不好的書壓根就不推薦了)
前置知識:
1.?反射
23基本的設(shè)計(jì)模式分為三大類:
在這里插入圖片描述創(chuàng)建型模式 (5種):
1. 工廠方法模式 (Factory Pattern)
2.?抽象工廠模式 (Abstract Factory Pattern)
3. 單例模式 (Singleton Pattern)
4. 建造者模式 (Builder Pattern)
5.?原型模式(Prototype Pattern)
結(jié)構(gòu)型模式 (7種):
1. 適配器模式 (Adapter Pattern)
2. 裝飾者模式(Decorator Pattern)
3. 代理模式(Proxy Pattern)
4. 外觀模式(門面模式Facade Pattern)
5. 橋接模式 (Bridge)
6. 組合模式(Composite Pattern)
7. 享元模式(Flyweight Pattern)
行為型模式(11種):
1. 策略模式 (Strategy Pattern)
2.?模板方法模式(Template Pattern)
3.?觀察者模式(Observer Pattern)
4. 迭代子模式(Iterator Pattern)
5. 責(zé)任鏈模式 (Chain of Responsibility Pattern)
6. 命令模式(Command Pattern)
7. 備忘錄模式(Memento Pattern)
8. 狀態(tài)模式(State Pattern)
9. 訪問者模式(Visitor Pattern)
10. 中介者模式(Mediator Pattern)
11. 解釋器模式(Interpreter Pattern)
不在23種的額外兩類:
并發(fā)型模式
1. 發(fā)布者/訂閱者模式
線程池模式
不屬于以上,但也經(jīng)常使用的:
1.?簡單工廠模式
2. 工廠模式
設(shè)計(jì)模式的七大原則:
1.單一職責(zé)原則SRP(Single Responsibility Principle)
所謂單一職責(zé)原則就是一個(gè)類僅有一個(gè)引起它變化的原因。這里變化的原因就是所說的“職責(zé)”。如果一個(gè)類有多個(gè)引起它變化的原因,那么也就意味著這個(gè)類有多個(gè)職責(zé),再進(jìn)一步說,就是把多個(gè)職責(zé)耦合在一起了。
2.開放-關(guān)閉原則OCP(Open-CLosed Principle)
所謂開放-閉合原則,指的是,一個(gè)類應(yīng)該對擴(kuò)展開放,最修改關(guān)閉。一般也被簡稱開閉原則,開閉原則是設(shè)計(jì)中非常核心的一個(gè)原則。開閉原則要求的是,類的行為是可以擴(kuò)展的,而且是在不修改已有代碼的情況下進(jìn)行擴(kuò)展,也不必改動(dòng)已有的源代碼或者二進(jìn)制代碼。實(shí)現(xiàn)開閉原則的關(guān)鍵就在于合理地抽象、分離出變化和不變化的部分,為變化的部分留下可擴(kuò)展的方式,比如,鉤子方法或者是動(dòng)態(tài)組合對象等。這個(gè)原則看起來也很簡單。但事實(shí)上,一個(gè)系統(tǒng)要全部做到遵守開閉原則,幾乎是不可能的,也沒這個(gè)必要。適度的抽象可以提高系統(tǒng)的靈活性,使其可擴(kuò)展、可維護(hù),但是過度的抽象,會大大的增加系統(tǒng)的復(fù)雜程度。應(yīng)該在需要改變的地方應(yīng)用開閉原則就可以了,而不用到處使用,從而陷入過度設(shè)計(jì)。
3.里氏代換原則(Liskov Substitution Principle)
子類型(subtype)必須能夠替換它們的基(父)類型。(子類可以以父類的身份出現(xiàn))。比如,如果是父類是鳥,鳥會飛。企鵝🐧不會飛,企鵝是鳥嗎?所以企鵝不能繼承鳥這個(gè)類。
4.依賴倒置原則DIP(Dependence Inversion Principle)
所謂依賴倒置原則,指的是,要依賴于抽象,不要依賴于具體類。要做到依賴倒置,典型的應(yīng)用應(yīng)該做到:
- 高層模塊不應(yīng)該依賴于底層模塊,二者都應(yīng)該依賴于抽象
- 抽象不應(yīng)該依賴于具體實(shí)現(xiàn),具體實(shí)現(xiàn)應(yīng)該依賴于抽象
- 一般高層模塊包含對業(yè)務(wù)功能的處理和業(yè)務(wù)策略選擇,應(yīng)該被重用的,是高層模塊去影響底層的具體實(shí)現(xiàn)。
- 要針對接口編程,而不是針對實(shí)現(xiàn)編程
因此,這個(gè)底層的接口與應(yīng)該由高層提出的,然后由底層實(shí)現(xiàn)的,也就是說底層接口的所有權(quán)在高層模塊,因此是一種所有權(quán)的倒置。
啟示:好的程序應(yīng)該強(qiáng)內(nèi)聚,松耦合。
5.最少知識原則LKP(Least Knowledge Principle)或稱 迪米特法則(LoD)
這個(gè)原則用來指導(dǎo)我們在設(shè)計(jì)系統(tǒng)的時(shí)候,應(yīng)該盡量減少對象之間的交互,對象只和自己的朋友談話,也就是只和自己的朋友交互,從而松散類之間的耦合。通過松散類之間的耦合來降低類之間的相互依賴,這樣在修改系統(tǒng)的某一個(gè)部分的時(shí)候,就不會影響其他的部分,從而使得系統(tǒng)具有更好的維護(hù)性。
那么哪些對象才能當(dāng)做朋友呢?
- 當(dāng)前對象本身
- 通過方法的參數(shù)傳遞過來的對象
- 當(dāng)前對象所創(chuàng)建的對象
- 當(dāng)前對象的實(shí)例變量所引用的對象
- 方法內(nèi)所創(chuàng)建或者實(shí)例化的對象
其根本思想:
- 強(qiáng)調(diào)了類之間的松耦合。
- 類之間的耦合越弱,越有利于復(fù)用,一個(gè)處于弱耦合的類被修改,不會對有關(guān)系的類造成波及。
- 信息的隱藏促進(jìn)了軟件的復(fù)用。
6.接口隔離原則(ISP)
接口隔離原則(Interface Segregation Principle)講的是:使用多個(gè)專門的接口比使用單一的總接口要好。換而言之,從一個(gè)客戶類的角度來講:一個(gè)類對另外一個(gè)類的依賴性應(yīng)當(dāng)是建立在最小接口上的。
過于臃腫的接口是對接口的污染。不提倡使用,也不應(yīng)該是用Dirt Interface。
7.合成/聚合原則
要盡量使用合成/聚合,而不是繼承關(guān)系達(dá)到復(fù)用的目的。
合成/聚合原則就是在一個(gè)新的對象里面使用一些已有的對象,使之成為新對象的一部分;新的對象通過向這些對象的委派達(dá)到復(fù)用已有。
持續(xù)更新中!!!
寫在最后:?博主風(fēng)骨散人,名字的意思是我多想可以不低頭的自由生活,可現(xiàn)實(shí)卻不是這樣。家境一般,難以實(shí)現(xiàn)階級,總得向這個(gè)世界低頭,所以我一直在奮斗,想改變我的命運(yùn)給親人好的生活,希望同樣被生活綁架的你可以通過自己的努力改變現(xiàn)狀,深知人生不易,要倍加珍惜。目前是一名在校大學(xué)生,預(yù)計(jì)考研,熱愛編程,熱愛技術(shù),喜歡分享,知識無界,希望我的分享可以幫到你!
如果有什么想看的,可以私信我,如果在能力范圍內(nèi),我會發(fā)布相應(yīng)的博文!
感謝大家的閱讀!😘你的點(diǎn)贊、收藏、關(guān)注是對我最大的鼓勵(lì)!
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的某一个接口403 其他接口可以调通_设计模式HR:不会设计模式,你来面什么试?你以为设计模式只有23种?(真正的入门到精通可以用到入土)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 白等了:佳能称目前不计划生产EOS R5
- 下一篇: java 中 statent,【行为型模