<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                今天來對這23種設計模式做個總結。咱使用設計模式的目的是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性,當然設計模式并不是萬能的,項目中的實際問題還有具體分析。咱不能為了使用設計模式而使用,而是在分析問題的過程中,想到使用某種設計模式能達到咱需要的效果,而且比不使用設計模式更有優勢,那么咱該考慮使用設計模式了。 ## 一、設計模式的一般分類 創建型(Creator)模式(共5種):單例、原型、建造者、工廠方法、抽象工廠。 結構型(Structure)模式(共7種):適配器、代理、外觀、橋接、組合、享元、裝飾者。 行為型(Behavior)模式(共11種):策略、觀察者、模板方法、迭代器、責任鏈、命令、備忘錄、狀態、訪問者、中介者、解釋器。 ## 二、下面談談我對這23種設計模式的理解 **1、創建型(Creator)模式(共5種)** ①單例(Singleton)是一種常用的設計模式。在Java應用中,單例對象能保證在一個JVM中,該對象只有一個實例存在。實現方式主要有餓漢式和懶漢式兩種。 ②原型(Prototype):該模式的思想就是將一個對象作為原型,對其進行復制、克隆,產生一個和原對象類似的新對象。實現方式主要有淺復制和深復制兩種。淺復制的關鍵是super.clone();而深復制,需要采用二進制流的形式寫入當前對象,再對其進行讀取。 ③建造者(Builder):該模式是將各種產品集中起來進行管理。將很多功能集成到一個類里,這個類可以創造出比較復雜的東西。它關注的是創建復合對象,多個部分。 ④工廠方法(Factory method):調用工廠里的方法來生產對象(產品)的。它有3種實現方式:1)普通工廠模式:就是建立一個工廠類,對實現了同一接口的一些類進行實例的創建)。2)多個工廠方法模式:是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字符串出錯,則不能正確創建對象,而多個工廠方法模式是提供多個工廠方法,分別創建對象。3)靜態工廠方法模式:將上面的多個工廠方法模式里的方法置為靜態的,不需要創建實例,直接調用即可。如果你想使用工廠方法模式可以優先選擇:靜態工廠方法模式。 ⑤抽象工廠(Abstract factory):顧名思義,就是把工廠抽象出來,不同的工廠生產不同的產品。 **2、結構型(Structure)模式(共7種)** ①適配器(Adapter):將某個類的接口轉換成客戶端期望的另一個接口表示,目的是消除由于接口不匹配所造成的類的兼容性問題。主要分為三類:類的適配器模式、對象的適配器模式、接口的適配器模式。1)類的適配器模式:當希望將一個類轉換成滿足另一個新接口的類時,可以使用類的適配器模式,創建一個新類,繼承原有的類,實現新的接口即可。2)對象的適配器模式:當希望將一個對象轉換成滿足另一個新接口的對象時,可以創建一個Adapter類,持有原類的一個實例,在Adapter類的方法中,調用實例的方法就行。3)接口的適配器模式:當不希望實現一個接口中所有的方法時,可以創建一個抽象類Adapter實現所有方法,我們寫別的類的時候,繼承抽象類即可。 ②代理(Proxy):代理模式其實就是多一個代理類出來,替原對象進行一些操作。比如咱有的時候打官司需要請律師,因為律師在法律方面有專長,可以替咱進行操作表達咱的想法,這就是代理的意思。有兩種實現方式:靜態代理(不使用JDK里面的方法)、動態代理(InvocationHandler和Proxy)。 ③外觀(Facade):也稱門面模式。外觀模式是為了解決類與類之間的依賴關系的,像spring一樣,可以將類和類之間的關系配置到配置文件中,而外觀模式就是將他們的關系放在一個Facade類中,降低了類類之間的耦合度,該模式中沒有涉及到接口。 ④橋接(Bridge): 把事物和其具體實現分開(抽象化與實現化解耦),使他們可以各自獨立的變化。橋接模式其實就是一種將N*M轉化成N+M組合的思想。 ⑤組合(Composite):組合模式有時又叫部分-整體模式,將對象組合成樹形結構來表示“部分-整體”層次結構。 ⑥享元(Flyweight):運用共享的技術有效地支持大量細粒度的對象。主要目的是實現對象的共享,即共享池,當系統中對象多的時候可以減少內存的開銷。在某種程度上,你可以把單例看成是享元的一種特例。 ⑦裝飾者(Decorator):動態地將責任附加到對象上,若要擴展功能,裝飾者提供了比繼承更具有彈性的替代方案。保持接口,增強性能。 **行為型(Behavior)模式(共11種)** ①策略(Strategy)讓用戶可以選擇執行一個動作的方法,也就是說,用戶可以選擇不同的策略來進行操作。個人覺得策略模式可以用這個公式:不同的XXX 擁有不同的XXX供用戶選擇。比如說:不同的象棋棋子擁有不同的走法供用戶選擇。 ②觀察者(Observer):在對象之間定義了一對多的依賴關系,這樣一來,當一個對象改變狀態時,依賴它的對象都會收到通知并自動跟新。Java已經提供了對觀察者Observer模式的默認實現,Java對觀察者模式的支持主要體現在Observable類和Observer接口。 ③模板方法(Template method):在一個方法中定義了一個算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以再不改變算法結構的情況下,重新定義算法中的某些步驟。簡而言之:模板方法定義了一個算法的步驟,并允許子類為一個或多個步驟提供實現。 ④迭代器(Iterator):提供了一種方法順序訪問一個聚合對象中的各個元素,而又不暴露其內部的表示。 ⑤責任鏈(ChainOfResponsibility): 有多個對象,每個對象持有下一個對象的引用,形成一條鏈,請求在這條鏈上傳遞,直到某一對象決定處理該請求,但是發出者并不清楚最終哪個對象會處理該請求。 ⑥命令(Command):將“請求”(命令/口令)封裝成一個對象,以便使用不同的請求、隊列或者日志來參數化其對象。命令模式也支持撤銷操作。 ⑦備忘錄(Memento): 主要目的是保存一個對象的某個狀態,以便在適當的時候恢復對象。 ⑧狀態(State):允許對象在內部狀態改變時改變它的行為,對象看起來好像修改了它的類。狀態模式說白了就是一個對像有不同的狀態,不同的狀態對應不同的行為,它其實是對switch case這樣的語句的拓展。 ⑨解釋器(Interpreter):它定義了對象與對象之間進行某種操作之后會得到什么值。一般主要應用在OOP開發中的編譯器的開發中,所以適用面比較窄。 ⑩中介者(Mediator):主要用來降低類與類之間的耦合的,因為如果類與類之間有依賴關系的話,不利于功能的拓展和維護,因為只要修改一個對象,其它關聯的對象都得進行修改。 ?訪問者(Visitor):把[**數據結構**](http://blog.csdn.net/lhy_ycu/article/details/9374819)和作用于結構上的操作解耦合,使得操作集合可相對自由地演化。訪問者模式適用于數據結構相對穩定而算法又容易變化的系統。訪問者模式的優點是增加操作很容易,因為增加操作意味著增加新的訪問者;而它的缺點就是增加新的數據結構很困難。 ## 三、Java設計模式菜鳥系列目錄 [Java設計模式菜鳥系列(一)策略模式建模與實現](http://blog.csdn.net/lhy_ycu/article/details/39721563) [Java設計模式菜鳥系列(二)觀察者模式建模與實現](http://blog.csdn.net/lhy_ycu/article/details/39755577) [Java設計模式菜鳥系列(三)裝飾者模式建模與實現](http://blog.csdn.net/lhy_ycu/article/details/39759199) [Java設計模式菜鳥系列(四)工廠方法模式建模與實現](http://blog.csdn.net/lhy_ycu/article/details/39760895) [Java設計模式菜鳥系列(五)抽象工廠模式建模與實現](http://blog.csdn.net/lhy_ycu/article/details/39784403) [Java設計模式菜鳥系列(六)單例模式建模與實現](http://blog.csdn.net/lhy_ycu/article/details/39785513) [Java設計模式菜鳥系列(七)命令模式建模與實現](http://blog.csdn.net/lhy_ycu/article/details/39804057) [Java設計模式菜鳥系列(八)適配器模式建模與實現](http://blog.csdn.net/lhy_ycu/article/details/39805069) [Java設計模式菜鳥系列(九)外觀模式建模與實現](http://blog.csdn.net/lhy_ycu/article/details/39805735) [Java設計模式菜鳥系列(十)模板方法模式建模與實現](http://blog.csdn.net/lhy_ycu/article/details/39806973) [Java設計模式菜鳥系列(十一)迭代器模式建模與實現](http://blog.csdn.net/lhy_ycu/article/details/39807741) [Java設計模式菜鳥系列(十二)組合模式建模與實現](http://blog.csdn.net/lhy_ycu/article/details/39828653) [Java設計模式菜鳥系列(十三)狀態模式建模與實現](http://blog.csdn.net/lhy_ycu/article/details/39829859) [Java設計模式菜鳥系列(十四)代理模式建模與實現](http://blog.csdn.net/lhy_ycu/article/details/39856435) [Java設計模式菜鳥系列(十五)建造者模式建模與實現](http://blog.csdn.net/lhy_ycu/article/details/39863125) [Java設計模式菜鳥系列(十六)原型模式建模與實現](http://blog.csdn.net/lhy_ycu/article/details/39997337) [Java設計模式菜鳥系列(十七)橋接模式建模與實現](http://blog.csdn.net/lhy_ycu/article/details/40008711) [Java設計模式菜鳥系列(十八)責任鏈模式建模與實現](http://blog.csdn.net/lhy_ycu/article/details/40018231) [Java設計模式菜鳥系列(十九)備忘錄模式建模與實現](http://blog.csdn.net/lhy_ycu/article/details/40018967) [Java設計模式菜鳥系列(二十)解釋器模式建模與實現](http://blog.csdn.net/lhy_ycu/article/details/40019829) [Java設計模式菜鳥系列(二十一)享元模式建模與實現](http://blog.csdn.net/lhy_ycu/article/details/40021651) [Java設計模式菜鳥系列(二十二)中介者模式建模與實現](http://blog.csdn.net/lhy_ycu/article/details/40027109) [Java設計模式菜鳥系列(二十三)訪問者模式建模與實現](http://blog.csdn.net/lhy_ycu/article/details/40028509) [**Java設計模式菜鳥系列教程PDF下載地址:http://download.csdn.net/detail/jave_lover/8714347**](http://download.csdn.net/detail/jave_lover/8714347)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看