1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢(xún)
      選擇下列產(chǎn)品馬上在線(xiàn)溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問(wèn)題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
      Java設(shè)計(jì)模式是什么-創(chuàng)新互聯(lián)

      這篇文章主要介紹Java設(shè)計(jì)模式是什么,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

      為黃陵等地區(qū)用戶(hù)提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及黃陵網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站建設(shè)、做網(wǎng)站、黃陵網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

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

      創(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í)候。

      單例

      單例模式保證全局的單例類(lèi)只有一個(gè)實(shí)例,這樣的話(huà)使用的時(shí)候直接獲取即可,比如數(shù)據(jù)庫(kù)的一個(gè)連接,Spring里的bean,都可以是單例的。
      
      單例模式一般有5種寫(xiě)法。
      
      第一種是餓漢模式,先把單例進(jìn)行實(shí)例化,獲取的時(shí)候通過(guò)靜態(tài)方法直接獲取即可。缺點(diǎn)是類(lèi)加載后就完成了類(lèi)的實(shí)例化,浪費(fèi)部分空間。
      
      第二種是飽漢模式,先把單例置為null,然后通過(guò)靜態(tài)方法獲取單例時(shí)再進(jìn)行實(shí)例化,但是可能有多線(xiàn)程同時(shí)進(jìn)行實(shí)例化,會(huì)出現(xiàn)并發(fā)問(wèn)題。
      
      第三種是逐步改進(jìn)的方法,一開(kāi)始可以用synchronized關(guān)鍵字進(jìn)行同步,但是開(kāi)銷(xiāo)太大,而后改成使用volatile修飾單例,然后通過(guò)一次檢查判斷單例是否已初始化,如果未初始化就使用synchronized代碼塊,再次檢查單例防止在這期間被初始化,而后才真正進(jìn)行初始化。
      
      第四種是使用靜態(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)的單例即可。
      
      第五種是枚舉類(lèi),枚舉類(lèi)的底層實(shí)現(xiàn)其實(shí)也是內(nèi)部類(lèi)。枚舉類(lèi)確保每個(gè)類(lèi)對(duì)象在全局是唯一的。所以保證它是單例,這個(gè)方法是最簡(jiǎn)單的。

      工廠模式

      簡(jiǎn)單工廠一般是用一個(gè)工廠創(chuàng)建多個(gè)類(lèi)的實(shí)例。
      
      工廠模式一般是指一個(gè)工廠服務(wù)一個(gè)接口,為這個(gè)接口的實(shí)現(xiàn)類(lèi)進(jìn)行實(shí)例化
      
      抽象工廠模式是指一個(gè)工廠服務(wù)于一個(gè)產(chǎn)品族,一個(gè)產(chǎn)品族可能包含多個(gè)接口,接口又會(huì)包含多個(gè)實(shí)現(xiàn)類(lèi),通過(guò)一個(gè)工廠就可以把這些綁定在一起,非常方便。

      原型模式

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

      建造者模式

      建造者模式中有一個(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)用。
      
      建造者模式在此基礎(chǔ)上加入了builder方法,提供給外部進(jìn)行調(diào)用,同樣使用鏈?zhǔn)秸{(diào)用來(lái)完成參數(shù)注入。

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

      前面創(chuàng)建型模式介紹了創(chuàng)建對(duì)象的一些設(shè)計(jì)模式,這節(jié)介紹的結(jié)構(gòu)型模式旨在通過(guò)改變代碼結(jié)構(gòu)來(lái)達(dá)到解耦的目的,使得我們的代碼容易維護(hù)和擴(kuò)展。

      適配器模式

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

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

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

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

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

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

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

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

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

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

      享元模式

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

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

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

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

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

      //享元模式

      // 英文是 Flyweight Pattern,不知道是誰(shuí)最先翻譯的這個(gè)詞,感覺(jué)這翻譯真的不好理解,我們?cè)囍鴱?qiáng)行關(guān)聯(lián)起來(lái)吧。Flyweight 是輕量級(jí)的意思,享元分開(kāi)來(lái)說(shuō)就是 共享 元器件,也就是復(fù)用已經(jīng)生成的對(duì)象,這種做法當(dāng)然也就是輕量級(jí)的了。

      // 復(fù)用對(duì)象最簡(jiǎn)單的方式是,用一個(gè) HashMap 來(lái)存放每次新生成的對(duì)象。每次需要一個(gè)對(duì)象的時(shí)候,先到 HashMap 中看看有沒(méi)有,如果沒(méi)有,再生成新的對(duì)象,然后將這個(gè)對(duì)象放入 HashMap 中。

      // 這種簡(jiǎn)單的代碼我就不演示了。

      代理模式

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

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

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

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

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

      外觀模式

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

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

      組合模式

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

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

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

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

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

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

      class Employee {
          private String name;
          private String dept;
          private int salary;
          private List subordinates; // 下屬
      }

      裝飾者模式

      裝飾者

      裝飾者模式把每個(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í)封裝。

      行為型模式

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

      策略模式

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

      命令模式

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

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

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

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

      模板方法模式

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

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

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

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

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

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

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

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

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

      主題當(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é)任鏈模式

      責(zé)任鏈通常需要先建立一個(gè)單向鏈表,然后調(diào)用方只需要調(diào)用頭部節(jié)點(diǎn)就可以了,后面會(huì)自動(dòng)流轉(zhuǎn)下去。比如流程審批就是一個(gè)很好的例子,只要終端用戶(hù)提交申請(qǐng),根據(jù)申請(qǐng)的內(nèi)容信息,自動(dòng)建立一條責(zé)任鏈,然后就可以開(kāi)始流轉(zhuǎn)了

      以上是Java設(shè)計(jì)模式是什么的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


      網(wǎng)站題目:Java設(shè)計(jì)模式是什么-創(chuàng)新互聯(lián)
      當(dāng)前網(wǎng)址:http://www.ef60e0e.cn/article/pipds.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        栖霞市| 太仆寺旗| 博客| 曲沃县| 虹口区| 毕节市| 腾冲县| 佛冈县| 古浪县| 固阳县| 治县。| 陇南市| 江城| 区。| 抚松县| 上饶县| 梓潼县| 泰顺县| 德化县| 板桥市| 云和县| 梧州市| 大新县| 永川市| 湘西| 灵山县| 崇义县| 黄陵县| 西吉县| 茶陵县| 灵丘县| 达州市| 斗六市| 滨海县| 湄潭县| 布拖县| 丰原市| 霍林郭勒市| 陇川县| 石门县| 江西省|