真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

設(shè)計(jì)模式常見面試知識(shí)點(diǎn)總結(jié)

設(shè)計(jì)模式

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

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

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

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

創(chuàng)建型模式

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

單例

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

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

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

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

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

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

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

工廠模式

  1. 簡(jiǎn)單工廠一般是用一個(gè)工廠創(chuàng)建多個(gè)類的實(shí)例。

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

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

原型模式

  1. 一般通過一個(gè)實(shí)例進(jìn)行克隆從而獲得更多同一原型的實(shí)例。使用實(shí)例的clone方法即可完成。

建造者模式

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

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

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

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

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

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

橋接模式

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

適配器模式

  1. 適配器模式用于將兩個(gè)不同的類進(jìn)行適配。

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

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

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

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

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

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

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

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

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

享元模式

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

  2. 享元工廠類的作用在于提供一個(gè)用于存儲(chǔ)享元對(duì)象的享元池,

  3. 用戶需要對(duì)象時(shí),首先從享元池中獲取,

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

  5. 在享元池中保存該新增對(duì)象。

代理模式

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

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

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

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

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

外觀模式

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

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

組合模式

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

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

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

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

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

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

  7. class Employee {

  8. private String name;

  9. private String dept;

  10. private int salary;

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

  12. }

裝飾者模式

裝飾者

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

和代理模式不同的是,裝飾者模式每個(gè)裝飾類都繼承父類,并且可以進(jìn)行多級(jí)封裝。

行為型模式

  1. 行為型模式

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

策略模式

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

命令模式

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

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

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

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

模板方法模式

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

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

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

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

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

  2. 一般分為觀察者和主題,觀察者訂閱主題,把實(shí)例注冊(cè)到主題維護(hù)的觀察者列表上。

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

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

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

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

責(zé)任鏈模式

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

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

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

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

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

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

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

×××術(shù)江湖

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

Java工程師必備學(xué)習(xí)資源: 一些Java工程師常用學(xué)習(xí)資×××關(guān)鍵字 “Java” 即可免費(fèi)無套路獲取。×××


網(wǎng)站名稱:設(shè)計(jì)模式常見面試知識(shí)點(diǎn)總結(jié)
本文地址:http://weahome.cn/article/pggssp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部