成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

設(shè)計模式常見面試知識點總結(jié)

設(shè)計模式

創(chuàng)新互聯(lián)公司專注于高陵企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),商城建設(shè)。高陵網(wǎng)站建設(shè)公司,為高陵等地區(qū)提供建站服務(wù)。全流程定制設(shè)計,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

這篇總結(jié)主要是基于我設(shè)計模式系列的文章而形成的的。主要是把重要的知識點用自己的話說了一遍,可能會有一些錯誤,還望見諒和指點。謝謝

更多詳細內(nèi)容可以到我的cdsn博客上查看: https://blog.csdn.net/a724888

最后,如果想要更好地完成這部分內(nèi)容的學(xué)習(xí),建議大家還是去看一下原文。

創(chuàng)建型模式

創(chuàng)建型模式 創(chuàng)建型模式的作用就是創(chuàng)建對象,說到創(chuàng)建一個對象,最熟悉的就是 new 一個對象,然后 set 相關(guān)屬性。但是,在很多場景下,我們需要給客戶端提供更加友好的創(chuàng)建對象的方式,尤其是那種我們定義了類,但是需要提供給其他開發(fā)者用的時候。

單例

  1. 單例模式保證全局的單例類只有一個實例,這樣的話使用的時候直接獲取即可,比如數(shù)據(jù)庫的一個連接,Spring里的bean,都可以是單例的。

  2. 單例模式一般有5種寫法。

  3. 第一種是餓漢模式,先把單例進行實例化,獲取的時候通過靜態(tài)方法直接獲取即可。缺點是類加載后就完成了類的實例化,浪費部分空間。

  4. 第二種是飽漢模式,先把單例置為null,然后通過靜態(tài)方法獲取單例時再進行實例化,但是可能有多線程同時進行實例化,會出現(xiàn)并發(fā)問題。

  5. 第三種是逐步改進的方法,一開始可以用synchronized關(guān)鍵字進行同步,但是開銷太大,而后改成使用volatile修飾單例,然后通過一次檢查判斷單例是否已初始化,如果未初始化就使用synchronized代碼塊,再次檢查單例防止在這期間被初始化,而后才真正進行初始化。

  6. 第四種是使用靜態(tài)內(nèi)部類來實現(xiàn),靜態(tài)內(nèi)部類只在被使用的時候才進行初始化,所以在內(nèi)部類中進行單例的實例化,只有用到的時候才會運行實例化代碼。然后外部類再通過靜態(tài)方法返回靜態(tài)內(nèi)部類的單例即可。

  7. 第五種是枚舉類,枚舉類的底層實現(xiàn)其實也是內(nèi)部類。枚舉類確保每個類對象在全局是唯一的。所以保證它是單例,這個方法是最簡單的。

工廠模式

  1. 簡單工廠一般是用一個工廠創(chuàng)建多個類的實例。

  2. 工廠模式一般是指一個工廠服務(wù)一個接口,為這個接口的實現(xiàn)類進行實例化

  3. 抽象工廠模式是指一個工廠服務(wù)于一個產(chǎn)品族,一個產(chǎn)品族可能包含多個接口,接口又會包含多個實現(xiàn)類,通過一個工廠就可以把這些綁定在一起,非常方便。

原型模式

  1. 一般通過一個實例進行克隆從而獲得更多同一原型的實例。使用實例的clone方法即可完成。

建造者模式

  1. 建造者模式中有一個概念叫做鏈?zhǔn)秸{(diào)用,鏈?zhǔn)秸{(diào)用為一個類的實例化提供便利,一般提供系列的方法進行實例化,實際上就是將set方法改造一下,將原本返回為空的set方法改為返回this實例,從而實現(xiàn)鏈?zhǔn)秸{(diào)用。

  2. 建造者模式在此基礎(chǔ)上加入了builder方法,提供給外部進行調(diào)用,同樣使用鏈?zhǔn)秸{(diào)用來完成參數(shù)注入。

結(jié)構(gòu)型模式

  1. 結(jié)構(gòu)型模式

  2. 前面創(chuàng)建型模式介紹了創(chuàng)建對象的一些設(shè)計模式。

  3. 這節(jié)介紹的結(jié)構(gòu)型模式旨在通過改變代碼結(jié)構(gòu)來達到解耦的目的,使得我們的代碼容易維護和擴展。

橋接模式

  1. 有點復(fù)雜。建議參考原文

適配器模式

  1. 適配器模式用于將兩個不同的類進行適配。

  2. 適配器模式和代理模式的異同

  3. 比較這兩種模式,其實是比較對象適配器模式和代理模式,在代碼結(jié)構(gòu)上,

  4. 它們很相似,都需要一個具體的實現(xiàn)類的實例。

  5. 但是它們的目的不一樣,代理模式做的是增強原方法的活;

  6. 適配器做的是適配的活,為的是提供“把雞包裝成鴨,然后當(dāng)做鴨來使用”,

  7. 而雞和鴨它們之間原本沒有繼承關(guān)系。

  8. 適配器模式可以分為類適配器,對象適配器等。

  9. 類適配器通過繼承父類就可以把自己適配成父類了。

  10. 而對象適配器則需要把對象傳入另一個對象的構(gòu)造方法中,以便進行包裝。

享元模式

  1. 享元模式的核心在于享元工廠類,

  2. 享元工廠類的作用在于提供一個用于存儲享元對象的享元池,

  3. 用戶需要對象時,首先從享元池中獲取,

  4. 如果享元池中不存在,則創(chuàng)建一個新的享元對象返回給用戶,

  5. 在享元池中保存該新增對象。

代理模式

  1. 我們發(fā)現(xiàn)沒有,代理模式說白了就是做 “方法包裝” 或做 “方法增強”。

  2. 在面向切面編程中,算了還是不要吹捧這個名詞了,在 AOP 中,

  3. 其實就是動態(tài)代理的過程。比如 Spring 中,

  4. 我們自己不定義代理類,但是 Spring 會幫我們動態(tài)來定義代理,

  5. 然后把我們定義在 @Before、@After、@Around 中的代碼邏輯動態(tài)添加到代理中。

外觀模式

  1. 外觀模式一般封裝具體的實現(xiàn)細節(jié),為用戶提供一個更加簡單的接口。

  2. 通過一個方法調(diào)用就可以獲取需要的內(nèi)容。

組合模式

  1. 組合模式用于表示具有層次結(jié)構(gòu)的數(shù)據(jù),使得我們對單個對象和組合對象的訪問具有一致性。

  2. 直接看一個例子吧,每個員工都有姓名、部門、薪水這些屬性,

  3. 同時還有下屬員工集合(雖然可能集合為空),

  4. 而下屬員工和自己的結(jié)構(gòu)是一樣的,

  5. 也有姓名、部門這些屬性,

  6. 同時也有他們的下屬員工集合。

  7. class Employee {

  8. private String name;

  9. private String dept;

  10. private int salary;

  11. private List<Employee> subordinates; // 下屬

  12. }

裝飾者模式

裝飾者

裝飾者模式把每個增強類都繼承最高級父類。然后需要功能增強時把類實例傳入增強類即可,然后增強類在使用時就可以增強原有類的功能了。

和代理模式不同的是,裝飾者模式每個裝飾類都繼承父類,并且可以進行多級封裝。

行為型模式

  1. 行為型模式

  2. 行為型模×××之間的相互作用,將職責(zé)劃分清楚,使得我們的代碼更加地清晰。

策略模式

  1. 策略模式一般把一個策略作為一個類,并且在需要指定策略的時候傳入實例,于是我們可以在需要使用算法的地方傳入指定算法。

命令模式

  1. 命令模式一般分為命令發(fā)起者,命令以及命令接受者三個角色。

  2. 命令發(fā)起者在使用時需要注入命令實例。然后執(zhí)行命令調(diào)用。

  3. 命令調(diào)用實際上會調(diào)用命令接收者的方法進行實際調(diào)用。

  4. 比如遙控器按鈕相當(dāng)于一條命令,點擊按鈕時命令運行,自動調(diào)用電視機提供的方法即可。

模板方法模式

  1. 模板方法一般指提供了一個方法模板,并且其中有部分實現(xiàn)類和部分抽象類,并且規(guī)定了執(zhí)行順序。

  2. 實現(xiàn)類是模板提供好的方法。而抽象類則需要用戶自行實現(xiàn)。

  3. 模板方法規(guī)定了一個模板中方法的執(zhí)行順序,非常適合一些開發(fā)框架,于是模板方法也廣泛運用在開源框架中。

觀察者模式和事件監(jiān)聽機制

  1. 觀察者模式一般用于訂閱者和消息發(fā)布者之間的數(shù)據(jù)訂閱。

  2. 一般分為觀察者和主題,觀察者訂閱主題,把實例注冊到主題維護的觀察者列表上。

  3. 而主題更新數(shù)據(jù)時自動把數(shù)據(jù)推給觀察者或者通知觀察者數(shù)據(jù)已經(jīng)更新。

  4. 但是由于這樣的方式消息推送耦合關(guān)系比較緊。并且很難在不打開數(shù)據(jù)的情況下知道數(shù)據(jù)類型是什么。

  5. 知道后來為了使數(shù)據(jù)格式更加靈活,使用了事件和事件監(jiān)聽器的模式,事件包裝的事件類型和事件數(shù)據(jù),從主題和觀察者中解耦。

  6. 主題當(dāng)事件發(fā)生時,觸發(fā)該事件的所有監(jiān)聽器,把該事件通過監(jiān)聽器列表發(fā)給每個監(jiān)聽器,監(jiān)聽得到事件以后,首先根據(jù)自己支持處理的事件類型中找到對應(yīng)的事件處理器,再用處理器處理對應(yīng)事件。

責(zé)任鏈模式

  1. 責(zé)任鏈通常需要先建立一個單向鏈表,然后調(diào)用方只需要調(diào)用頭部節(jié)點就可以了,后面會自動流轉(zhuǎn)下去。

  2. 比如流程審批就是一個很好的例子,只要終端用戶提交申請,根據(jù)申請的內(nèi)容信息,自動建立一條責(zé)任鏈,然后就可以開始流轉(zhuǎn)了。×××黃小斜是跨考軟件工程的 985 碩士,自學(xué) Java 兩年,拿到了 BAT 等近十家大廠 offer,從技術(shù)小白成長為阿里工程師。

作者專注于 JAVA 后端技術(shù)棧,熱衷于分享程序員干貨、學(xué)習(xí)經(jīng)驗、求職心得和程序人生,目前黃小斜的CSDN博客有百萬+訪問量,知乎粉絲2W+,全網(wǎng)已有10W+讀者。

黃小斜是一個斜杠青年,堅持學(xué)習(xí)和寫作,相信終身學(xué)習(xí)的力量,希望和更多的程序員交朋友,一起進步和成長!

原創(chuàng)電子書×××回復(fù)【原創(chuàng)電子書】即可領(lǐng)取我原創(chuàng)的電子書《菜鳥程序員修煉手冊:從技術(shù)小白到阿里巴巴Java工程師》

程序員3T技術(shù)學(xué)習(xí)資源: 一些程序員學(xué)習(xí)技術(shù)的資源大禮×××關(guān)鍵字 “資料” 即可免費無套路獲取。

考研復(fù)習(xí)資料: 計算機考研大禮包,都是我自己考研復(fù)習(xí)時用的一些復(fù)習(xí)資料,包括公共課和專業(yè)的復(fù)習(xí)視頻,這里也推薦給大×××關(guān)鍵字 “考研” 即可免費獲取。

×××術(shù)江湖

如果大家想要實×××章以及分享的干貨的話,可×××術(shù)江湖】一位阿里 Java 工程師的技術(shù)小站,作者黃小斜,專注 Java 相關(guān)技術(shù):SSM、SpringBoot、MySQL、分布式、中間件、集群、Linux、網(wǎng)絡(luò)、多線程,偶爾講點Docker、ELK,同時也分享技術(shù)干貨和學(xué)習(xí)經(jīng)驗,致力于Java全棧開發(fā)!

Java工程師必備學(xué)習(xí)資源: 一些Java工程師常用學(xué)習(xí)資×××關(guān)鍵字 “Java” 即可免費無套路獲取?!痢痢?/p>

網(wǎng)站標(biāo)題:設(shè)計模式常見面試知識點總結(jié)
分享網(wǎng)址:http://jinyejixie.com/article38/pggssp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、移動網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、ChatGPT、做網(wǎng)站、網(wǎng)站設(shè)計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
金川县| 彭山县| 乡城县| 科技| 琼中| 买车| 盐池县| 会宁县| 高雄市| 遵义县| 巴东县| 吉林市| 日土县| 崇阳县| 丰原市| 临朐县| 台南县| 闽清县| 屏山县| 康保县| 黎川县| 周至县| 新晃| 遂川县| 汕尾市| 察雅县| 公主岭市| 什邡市| 康马县| 英德市| 防城港市| 根河市| 霍林郭勒市| 志丹县| 图木舒克市| 肇东市| 睢宁县| 应用必备| 灵石县| 申扎县| 鹤壁市|