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

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

設(shè)計(jì)模式常見(jiàn)面試知識(shí)點(diǎn)總結(jié)(Java版)-創(chuàng)新互聯(lián)

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

成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)服務(wù)商,為中小企業(yè)提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作服務(wù),網(wǎng)站設(shè)計(jì),網(wǎng)站托管維護(hù)等一站式綜合服務(wù)型公司,專(zhuān)業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競(jìng)爭(zhēng)對(duì)手中脫穎而出成都創(chuàng)新互聯(lián)公司。

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

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

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

創(chuàng)建型模式

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

單例

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

  2. 單例模式一般有5種寫(xiě)法。

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

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

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

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

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

工廠模式

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

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

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

原型模式

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

建造者模式

  1. 建造者模式中有一個(gè)概念叫做鏈?zhǔn)秸{(diào)用,鏈?zhǔn)秸{(diào)用為一個(gè)類(lèi)的實(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)用來(lái)完成參數(shù)注入。

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

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

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

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

橋接模式

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

適配器模式

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

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

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

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

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

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

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

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

  9. 類(lèi)適配器通過(guò)繼承父類(lèi)就可以把自己適配成父類(lèi)了。

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

享元模式

  1. 享元模式的核心在于享元工廠類(lèi),

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

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

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

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

代理模式

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

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

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

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

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

外觀模式

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

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

組合模式

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

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

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

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

  5. 也有姓名、部門(mén)這些屬性,

  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)類(lèi)都繼承最高級(jí)父類(lèi)。然后需要功能增強(qiáng)時(shí)把類(lèi)實(shí)例傳入增強(qiáng)類(lèi)即可,然后增強(qiáng)類(lèi)在使用時(shí)就可以增強(qiáng)原有類(lèi)的功能了。

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

行為型模式

  1. 行為型模式

  2. 行為型模式關(guān)注的是各個(gè)類(lèi)之間的相互作用,將職責(zé)劃分清楚,使得我們的代碼更加地清晰。

策略模式

  1. 策略模式一般把一個(gè)策略作為一個(gè)類(lèi),并且在需要指定策略的時(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)類(lèi)和部分抽象類(lèi),并且規(guī)定了執(zhí)行順序。

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

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

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

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

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

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

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

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

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

責(zé)任鏈模式

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

  2. 比如流程審批就是一個(gè)很好的例子,只要終端用戶(hù)提交申請(qǐng),根據(jù)申請(qǐng)的內(nèi)容信息,自動(dòng)建立一條責(zé)任鏈,然后就可以開(kāi)始流轉(zhuǎn)了。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。


本文標(biāo)題:設(shè)計(jì)模式常見(jiàn)面試知識(shí)點(diǎn)總結(jié)(Java版)-創(chuàng)新互聯(lián)
瀏覽地址:http://weahome.cn/article/djsdsp.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部