大話設計模式學習筆記

來源:互聯網
上載者:User

標籤:

大話設計模式筆記
1. 使用簡單原廠模式(使用反射可以解決避免分支判斷問題)
   注重建立不同的對象    
2. 使用原則模式處理
   不同的時間應用不同的商務規則
3. 單一原則:一個類僅有一個變化的原因  發現職責並把職責分離
4. 開放-封閉原則:軟體實體可以擴充但不能修改  對擴充開放 對更改封閉
   開發人員對程式中呈頻繁變化的那部分做出抽象
5. 依賴倒轉原則:
   A.高層模組不應依賴底層模組。兩者都應該依賴抽象。
   B.抽象不應該依賴細節,細節應該依賴於抽象。即針對介面編程,
   不應針對實現編程。
   裡氏替換原則:子類型必須能夠替換掉它們的父類型
6. 裝飾模式
   動態地給對象添加一些額外的職責,就功能而言,裝飾模式比產生子類更為靈活。
   裝飾模式是利用setComponent來對對象進行封裝。這樣每個裝飾對象的實現就和
   如何使用這個對象分離開了。
   裝飾模式是為已有功能動態地添加更多功能的一種方式。
7. 代理模式
   為其他對象提供一種代理以控制對這個對象的訪問。
   應用場合:
   1.遠程代理。為一個對象在不同的地址空間提供局部代表。這樣可以隱藏一個對象
     存在不同地址空間的事實。
   2.虛擬代理。根據需要建立開銷很大的對象。通過它存放執行個體化需要很長時間的
     真實對象。
   3.安全代理。用來控制真實對象訪問時的許可權。用於對象應該有不同的存取權限時。
   4.智能指引。調用真實對象時,代理處理另外一些事。
8. Factory 方法模式
   Factory 方法模式是簡單原廠模式的進一步抽象和推廣。
9. 原型模式
   用原型執行個體指定建立對象的種類,並且通過拷貝這些原型建立新的對象。
   從一個對象建立另一個可定製的對象,而且不需要指定任何建立細節。
   一般在初始化資訊不發生變化的情況下,複製是最好的辦法。可以提高效率。
   clone:淺複製和深複製。
   淺複製:被複製對象所有變數都含有與原來的對象相同的值,而所有的對其他對象
           的引用都仍然指向原來的對象。
   深複製:把引用對象的變數指向複製過的新對象,而不是原有的被引用的對象。
10.模板方法模式
   定義一個操作中演算法的骨幹,而將一些步驟延遲到子類中。模板方法使得子類可以
   不改變一個演算法的結構即可重定義該演算法的某些特定的步驟。
   模板方法就是把不變的行為搬移到超類,去除子類中的重複代碼來體現它的優勢。
   模板方法提供了一個很好的代碼複用平台。
11.迪米特法則
   如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接的相互作用。如果
   一個類需要調用另一個類的某一個方法的話,可以通過第三者轉寄這個調用。
   類之間的耦合越弱,越有利於複用,一個處於弱耦合的類被修改,不會對有關係的
   類造成波及。
12.面板模式
   為了子系統中的一組介面提供一個一致的介面,此模式定義了一個高層介面,這個
   介面使得子系統更加容易使用。
   1)設計初期階段,應該要有意識的將不同的兩個層分離。層與層之間建立外觀Facade
   2)開發階段,子系統往往因為不斷的重構演化而變得越來越複雜。Facade提供一個
      簡單的介面,減少它們之間的依賴。
   3)維護一個遺留的大型系統時,這個系統可能已經非常難以維護和擴充。開發一個
      Facade類,來提供設計粗糙或高度複雜的遺留代碼的比較清晰簡單的介面,讓
      新系統與Facade對象互動,Facade與遺留代碼互動所有複雜的工作。
13.建造者模式
   將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
   建造者模式可以將一個產品的內部表象與產品的產生過程分割開來,從而可以使一個
   建造過程產生具有不同的內部表象的產品對象。
14.觀察者模式
   觀察者又叫發布訂閱模式。定義了一種一對多的依賴關係,讓多個觀察者對象同時
   監聽某一個主題對象。這個主題對象在狀態發生變化時,會通知所有的觀察者對象,
   使他們能夠自動更新自己。
   當一個對象的改變需要同時改變其他對象的時候,而且不知道具體有多少對象有待
   改變時,應該考慮使用觀察者模式。
   委託是一種引用方法的類型。一旦委託分配了方法,委託將與該方法具有完全相同
   的行為。委託方法的使用可以像其他任何方法一樣,具有參數和返回值。委託可以
   看作是對函數的抽象,是函數的‘類’,委託的執行個體將代表一個具體的函數。
   一個委託可以載入多個方法,所有方法被依次喚起。它可以使得委派物件所搭載的
   方法並不需要屬於同一類。
   委託的前提條件:委派物件所搭載的所有方法必須具有相同的原形和形式,也就是
   擁有相同的參數列表和返回值類型。
15.抽象原廠模式
   提供一個建立一系列相關或者相互依賴對象的介面,而無需指定它們具體的類。
   利用發射+設定檔消除寫入程式碼
   反射可以消除switch或if,解除分之判斷帶來的耦合
16.狀態模式
   當一個對象的內在狀態改變時允許改變其行為,這個對象看起來像是改變了其類。
   狀態模式主要解決的是當控制一個對象狀態轉換的條件運算式過於複雜的情況。把
   狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡單
   化。
   當一個對象的行為取決於它的狀態,並且它必須在運行時刻根據它的狀態改變它的
   行為時,就可以考慮使用狀態模式了。
17.適配器模式
   將一個類的介面轉換成客戶希望的另一個介面。adapter模式使得原本由於介面不
   相容而不能一起工作的那些類可以一起工作。
   適配器模式應用於希望複用一些現存的類,但是介面又與複用環境要求不一致的情
   況。
   類適配器模式和對象適配器模式。
   兩個類所做的事情相同或相似,但是具有不同的介面時要使用它。 
   在雙方都不太容易修改的時候再考慮使用適配器模式。
18.備忘錄模式
   不破壞封裝性的前提下,捕獲一個對象的內部狀態,並在該對象之外儲存這個狀態。
   這樣以後就可以將該對象恢複到原來儲存的狀態。
   把細節封裝在memento中,哪一天要更改儲存的細節也不影響用戶端。
   memento模式比較適用於功能比較複雜的,但需要維護或者記錄屬性曆史的類,或者
   需要儲存的屬性只是眾多屬性中的一小部分。
19.組合模式
   將對象合成樹形結構以表示‘部分-整體’的階層。組合模式使得使用者對單個對
   象和組合對象的使用具有一致性。
   component中聲明所有用來管理子物件的方法,其中包括add、remove等方法。這樣
   實現component介面的所有子類有具備了add和remove。這樣做的好處就是分葉節點和
   枝節點對外界沒有區別,它們具備完全一致的行為介面。但是問題也很明顯,因為
   leaf類本身不具體add、remove方法的功能,所以實現它是沒有意義的。
   何時使用?
   在需求中是體現部分與整體的階層時,以及你希望使用者可以完全忽略組合對象
   和單個對象的不同,統一地使用組合結構中的所有對象時,就應該考慮使用組合模式
   了。
20.迭代器模式
   提供一種方法順序地訪問一個彙總對象中的各個元素,而又不暴露該對象的內部表示。
21.單例模式
   保證一個類僅有一個執行個體,並提供一個訪問它的全域訪問點。
   讓類自身負責保護它的唯一執行個體,這個類可以保證沒有其他執行個體可以被建立,並且
   它可以提供一個訪問該執行個體的方法。
   多線程時的單例:
   lock是確保當一個線程位於代碼的臨界區時,另一個線程不進入臨界區。如果其他線程
   試圖進入鎖定的代碼,則它將一直等待(被阻止),直到該對象被釋放。
   分為:餓漢式單例和懶漢式單例
22.橋接模式
   合成/彙總原則:盡量使用合成/彙總,盡量不要使用類繼承。
   彙總表示一種弱的“擁有”關係,體現的是A對象可以包含B對象,但B對象不是A對象
   的一部分;合成則是一種強的“擁有”關係,體現了嚴格的部分和整體的關係,部分和
   整體的生命週期一樣。
   優先使用對象的合成/彙總將有助於你保持每個類被封裝,並被集中在單個任務上。
   這樣類和類的繼承層次會保持較小規模,並且不太可能增長為不可控制的龐然大物。
   橋接模式:將抽象部分與它的實現部分分離,使它們都可以獨立地變化。
   “將抽象部分與它的實現部分分離”,實現系統可能有多角度分類,每一種分類都
   有可能變化,那麼就把這種多角度分離出來讓它們獨立變化,減少它們之間的耦合。
23.命令模式
   將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數化;對請求
   排隊或記錄請求日誌,以及支援可撤銷的操作。
   優點:
   1)能較容易地設計一個命令隊列。
   2)在需要的情況下,可以較容易地將命令記入日誌。
   3)允許接收請求的一方決定是否要否決請求。
   4)可以容易地實現對請求的撤銷和重做。
   5)由於加進新的具體命令類不影響其他的類,因此增加新的具體類很容易。
   6)命令模式把請求一個操作的對象與知道怎麼執行一個操作的對象分割開。
24.職責鏈模式
   使多個對象都有機會處理請求,從而避免請求的寄件者和接收者之間的耦合關係
   將這個對象連城一條鏈,並沿著這條鏈傳遞該請求,直到有一個對象處理它為止。
   優點:當客戶提交一個請求時,請求時沿鏈傳遞直至有一個ConcreteHandler對象
   負責處理它。
25.中介者模式
   用一個中介對象來封裝一系列的對象互動。中介者使各對象不需要顯式地相互引用,
   從而使其耦合鬆散,而且可以獨立地改變它們之間的互動。
   中介者模式一般應用於一組對象以定義良好但是複雜的方式進行通訊的場合,以及
   想定製一個分布在多個類中的行為,而又不想產生太多的子類的場合。
26.享元模式
   享元模式,運用共用技術有效地支援大量細粒度的對象。
   享元模式可以避免大量非常相似類的開銷。在程式設計中,有時需要產生大量細粒
   度的類執行個體來表示資料。如果能發現這些執行個體除了幾個參數外基本上都是相同的
   有時就能夠受大幅度地減少需要執行個體化的類的數量。如果能把那些參數移到類執行個體
   的外面,在方法調用的時將它們傳遞進來,就可以通過共用大幅度地減少單個執行個體
   的數目。
   如果一個應用程式使用了大量的對象,而大量的這些對象造成了很大的儲存開銷時
   就應該考慮使用;還有就是對象的大多數狀態可以外部狀態,如果刪除對象的外部
   狀態,那麼可以用相對較少的共用對象取代很多組對象,此時可以考慮使用享元模
   式。
27.解譯器模式
   給定一個語言,定義它的文法的一種表示,並定義一個解譯器,這個解譯器使用該
   表示來解釋語言中的句子。
   解譯器模式需要解決的是,如果一種特定類型的問題發生的頻率足夠高,那麼可能
   就值得將該問題的各個執行個體標書為一個簡單語言中的句子。這樣就可以構建一個解
   釋器,該解譯器通過解釋這些句子來解決該問題。
28.訪問者模式
   表示一個作用於某對象結構中的各元素的操作。它使你可以在不改變各元素的類的
   前提下定義作用於這些元素的新操作。
   訪問者模式適用於資料結構相對穩定的系統。
   它把資料結構和作用於結構上的操作之間的耦合解脫開,使得操作集合可以相對自
   由地演化。
29.模式總結
   
   











大話設計模式學習筆記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.