1. 程式人生 > >學了那麼多年設計模式依然不會用,那可真蠢

學了那麼多年設計模式依然不會用,那可真蠢

Java  設計模式

1.一共23種設計模式

2.共分為三大類:建立型(5種):工廠方法模式、抽象工廠方法模式、單利模式、建造者模式、原型模式。

       結構型(7種):介面卡模式、裝飾者模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。

       行為型(11種):策略模式、模版方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、直譯器模式。

3. 設計模式6大原則:

     1、開閉原則 (擴充套件開放,修改封閉)

     2、里氏代換原則 (子類可以替換父類)

     3、依賴倒轉原則  (依賴抽象,非具體類)

     4、介面隔離原則 (使用多個介面,比使用一個介面好)

     5、迪米特法則 (實體類應當減少互相作用)

     6、合成複用原則 (儘量使用合成與聚合方式,少用繼承)

4. 簡單解釋各個設計模式

     工廠 - 就是建立一個工廠類,對實現了同一介面的一些類進行例項的建立。

   單例 - 只能建立一個例項

   建造者 - 建造者模式是將各種產品集中起來進行管理,用來建立複合物件

   原型 - 該模式的思想就是將一個物件作為原型,對其進行復制、克隆,產生一個和原物件類似的新物件

   介面卡 - 介面卡模式將某個類的介面轉換成客戶端期望的另一個介面表示,目的是消除由於介面不匹配所造成的類的相容性問題

   裝飾 - 裝飾模式就是給一個物件增加一些新的功能,而且是動態的,要求裝飾物件和被裝飾物件實現同一個介面,裝飾物件持有被裝飾物件的例項

   代理 - 代理模式就是多一個代理類出來,替原物件進行一些操作

   外觀 - 外觀模式就是將他們的關係放在一個Facade類中,降低了類類之間的耦合度,該模式中沒有涉及到介面

   橋接 - 將抽象化與實現化解耦,使得二者可以獨立變化

   組合 - 組合模式有時又叫部分-整體模式在處理類似樹形結構的問題時比較方便

   享元 - 享元模式的主要目的是實現物件的共享,即共享池,當系統中物件多的時候可以減少記憶體的開銷

   策略 - 策略模式定義了一系列演算法,並將每個演算法封裝起來,使他們可以相互替換,且演算法的變化不會影響到使用演算法的客戶

   模板 - 就是指:一個抽象類中,有一個主方法,再定義1...n個方法,定義一個類,繼承該抽象類,通過呼叫抽象類,實現對子類的呼叫

   觀察者 - 當一個物件變化時,其它依賴該物件的物件都會收到通知,並且隨著變化!物件之間是一種一對多的關係

   迭代 - 迭代器模式就是順序訪問聚集中的物件

   責任鏈 - 有多個物件,每個物件持有對下一個物件的引用,這樣就會形成一條鏈,請求在這條鏈上傳遞,直到某一物件決定處理該請求

   命令 - 發出口令,口令經過傳遞,傳到了士兵耳朵裡,士兵去執行

   備忘錄 - 主要目當物件的狀態改變時,同時改變其行為的是儲存一個物件的某個狀態,以便在適當的時候恢復物件,個人覺得叫備份模式更形象些

   狀態 - 當物件的狀態改變時,同時改變其行為

   訪問者 - 訪問者模式就是一種分離物件資料結構與行為的方法,通過這種分離,可達到為一個被訪問者動態新增新的操作而無需做其它的修改的

   中介者 - 中介者模式也是用來降低類類之間的耦合的,類之間有依賴關係的話,不利於功能的拓展和維護,修改一個物件,關聯的物件都得修改

   直譯器 - 基本就這樣,直譯器模式用來做各種各樣的直譯器,如正則表示式等的直譯器等等

5. 面向物件的思想精髓

    封裝、繼承、多型可以把程式的耦合度降低了

    設計模式使得程式更加的靈活容易修改,並且易於複用

    面向物件的程式設計,並不是類越多越好,類的劃分是為了封裝,但分類的基礎是抽象,具有相同屬性和功能的物件的抽象集合才是類

    假設變化不會發生,當發生時,我們就建立抽象來隔離以後發生的同類變化

    面向物件的好處:可維護性、可擴充套件性、可複用性、靈活性。

    抽象不應該依賴細節,細節應該依賴於抽象,介面程式設計,不要實現程式設計。