原创 設計模式(21) 狀態模式

狀態模式允許一個對象在其內部狀態改變時改變它的行爲。用電梯來舉例,電梯可以認爲具有開門、關門、運行、停止四種狀態,這四種狀態之間的切換具有多種限制,比如在開門狀態下不電梯不能運行,只能轉爲關門狀態;在運行狀態下,電梯只能轉爲停止狀態...

原创 設計模式(20) 觀察者模式

觀察者模式是一種平時接觸較多的模式。它主要用於一對多的通知發佈機制,當一個對象發生改變時自動通知其他對象,其他對象便做出相應的反應,同時保證了被觀察對象與觀察對象之間沒有直接的依賴。 GOF對觀察者模式的描述爲: Define a one-

原创 設計模式(18) 中介者模式

一個軟件系統中往往包含了很多的類,這些類之間會存在互相的調用,隨着系統的升級、功能的擴展,這些相互調用關係會變得非常複雜,,大量的相互連接使得這樣一個類型系統不太可能在沒有其他類支持的情況下獨立完成工作,久而久之這些類將變得像一個不可分割的

原创 設計模式(19) 備忘錄模式

備忘錄模式可以在不破壞封裝的前提下,將一個對象的狀態捕捉(Capture)住,並在外部存儲,從而可以在需要的時候把這個對象還原到存儲起來的狀態。備忘錄模式常常與命令模式和迭代器模式一同使用。 GOF對備忘錄模式的描述爲: Without v

原创 設計模式(17) 迭代器模式

迭代器模式 基於IEnumerable的實現 使用場景 迭代器模式的優缺點 迭代器模式 迭代器模式用於順序訪問集合對象的元素,而不需要知道集合對象的底層表示。Java和.Net等語言已經將迭代器作爲其內部語法元素,比如在C#中,集合對象

原创 設計模式(13) 職責鏈模式

行爲型模式 行爲型模式關注於應用運行過程中算法的提供和通信關係的梳理。 相比於創建型模式和結構型模式,行爲型模式包含了最多的設計模式種類,包括: 職責鏈模式 模板方法模式 解釋器模式 命令模式 迭代器模式 中介者模式 備忘錄模式 觀察者模

原创 設計模式(15) 解釋器模式

項目中有時會遇到某類問題出現得非常頻繁,而且它們的變化也基本上以一些規律性的方式進行變化。對於這類問題,如果編寫一個對象類進行處理,隨着業務變更,將需要頻繁地修改代碼、編譯、部署。與其反覆做這種工作,不如把它們抽象爲一個語言(語法定義可能很

原创 設計模式(14) 模板方法模式

模板方法模式 模板方法模式是面向對象系統中非常樸實的一種模式,體現出面向對象設計中繼承和多態的基本特徵。在開發應用的過程中,往往會在初期規劃一些較粗粒度的算法,而且對參與計算的對象進行抽象,明確算法會使用到哪些方法,每個方法可以提供哪些支持

原创 設計模式(12) 代理模式

代理模式的目地是爲對象提供一種代理以控制對這個對象的訪問。爲什麼會出現“通過一個代理對象,控制其他對象訪問目標對象”這種場景,而不知直接new()出一個對象直接使用呢?這是因爲在有些場景下對象的訪問比較複雜,且需要一些額外的控制,這時如果直

原创 設計模式(11) 享元模式

基於面向對象思想設計的應用程序有時遇到需要場景大量相同或顯示對象實例的場景,這些數量龐大的實例很可能會消耗很多系統資源,最直接的就是內存了。比如要一款圍棋遊戲,如果每次落子都新建一個對象,將會佔用大量內存,而實際上棋子只有黑白兩色,不同的只

原创 設計模式(10) 外觀模式

外觀模式(或門面模式、包裝模式)是設計模式中非常樸素地體現面向對象“封裝”概念的模式,它的基本原理是將複雜的內部實現以統一接口的方式暴露出來,最大程度地減少客戶程序對某些子系統內部衆多對象的依賴關係。 外觀模式在開發過程中運用頻率非常高,比

原创 設計模式(9) 裝飾模式

裝飾模式 裝飾模式的特點 動態撤銷功能 裝飾模式可以動態向一個現有的對象添加新的功能,同時又不改變其結構。就增加功能來說,使用繼承的方式生成子類也可以達到目的,但隨着擴展功能的不斷增加,子類的數量會快速膨脹,而裝飾模式提供了一種更加靈活

原创 設計模式(8) 組合模式

組合模式 透明模式與安全模式 對組合的篩選遍歷 無論是在生活中還是項目中,我們經常會遇到具有“部分-整體”概念的對象,比如員工與團隊的關係,這就類似樹形結構,可能具有很多的嵌套層次和分支,把這種複雜性直接暴露給調用端是不合適的。 組合模

原创 設計模式(7) 橋接模式

橋接模式的概念與實現 爲什麼叫橋接模式 橋接模式的適用場景 繼承是面向對象的三大特性之一,但很多時候使用繼承的結果卻不盡如人意。除了人盡皆知的緊耦合問題外,有的時候還會導致子類的快速膨脹。 設想這樣一個場景:最初設計的時候有一個類型Pr

原创 設計模式(6) 適配器模式

結構型模式 適配器模式 類適配器和對象適配器 結構型模式 結構型模式的重點在於如何通過靈活的體系組織不同的對象,並在此基礎上完成更爲複雜的類型(或者類型系統),而參與組合的各類型之間始終保持儘量鬆散的結構關係。 結構型模式包括以下幾種: