單例設計模式
單例設計模式就是保證一個類中,有且只有一個執行個體存在並提供一個訪問點供全域訪問,該執行個體可以被所有的程式來訪問。
一般在這種情況下用: 當要用一個類時,又要用該類中的一個執行個體; new 來建立執行個體時會給程式造成資源的浪費,而且執行個體越多也不好控制。 不同的線程調用時,可能會引起不同步的現象。
實際開發中用到單例模式的情況: 資料庫連接池 Windows的Task Manager(工作管理員),打不開第二個工作管理員 大部分的音樂播放器 網站的計數器 windows的Recycle Bin(資源回收筒)也是典型的單例應用。在整個系統運行過程中,資源回收筒一直維護著僅有的一個執行個體。 工廠設計模式
首先,Factory 方法模式是new一個對象的替代品,所以在所有需要產生對象的地方都可以使用,但是需要謹慎地考慮是否要增加一個工廠類進行管理,增加代碼的複雜度。其次,需要靈活的、可擴充的架構時,可以考慮採用Factory 方法模式。萬物皆對象,那萬物也就皆產品類,例如需要設計一個串連郵件伺服器的架構,有三種網路通訊協定可供選擇:POP3、IMAP、HTTP,我們就可以把這三種串連方法作為產品類,定義一個介面如IConnectMail,然後定義對郵件的操作方法,三個具體的產品類(也就是串連方式)進行不同的實現,再定義一個Factory 方法,按照不同的傳入條件,選擇不同的串連方式。如此設計,可以做到完美的擴充,如某些郵件伺服器提供了WebService介面,很好,我們只要增加一個產品類就可以了。再次,Factory 方法模式可以用在異構項目中,例如通過WebService與一個非Java的項目互動,雖然WebService號稱是可以做到異構系統的同構化,但是在實際的開發中,還是會碰到很多問題,如類型問題、WSDL檔案的支援問題,等等,從WSDL中產生的對象都認為是一個產品,然後由一個具體的工廠類進行管理,減少與外圍系統的耦合。最後,可以使用在測試驅動開發的架構下,例如,測試一個類A,就需要把與類A有關聯關係的類B也同時產生出來,我們可以使用Factory 方法模式把類B虛擬出來,避免類A與類B的耦合。目前由於JMock和EasyMock的誕生,該使用情境已經弱化了,讀者可以在遇到此種情況時直接考慮使用JMock或EasyMock。
代理設計模式
這裡有一個很厲害的類比。。我就不粘過來了 適配器模式 電源轉換器的類比 和尚的例子