所謂設計模式,就是一套被反復使用的代碼設計經驗的總結(情境中一個問題經
過證實的一個解決方案)。使用設計模式是為了可重用代碼、讓代碼更容易被他
人理解、保證代碼可靠性。設計模式使人們可以更加簡單方便的復用成功的設計
和體系結構。將已證實的技術表述成設計模式也會使新系統開發者更加容易理解
其設計思路。
在 GoF 的《Design Patterns: Elements of Reusable Object-Oriented
Software》中給出了三類(創建型[對類的實例化過程的抽象化]、結構型[描述如
何將類或對象結合在一起形成更大的結構]、行為型[對在不同的對象之間划分責任
和算法的抽象化])共 23 種設計模式,包括:Abstract Factory(抽象工廠模式),
Builder(建造者模式),Factory Method(工廠方法模式),Prototype(原始
模型模式),Singleton(單例模式);Facade(門面模式),Adapter(適配器
模式),Bridge(橋梁模式),Composite(合成模式),Decorator(裝飾模
式),Flyweight(享元模式),Proxy(代理模式);Command(命令模式),
第 317 頁 共 485 頁第 318 頁 共 485 頁
Interpreter(解釋器模式),Visitor(訪問者模式),Iterator(迭代子模式),
Mediator(調停者模式),Memento(備忘錄模式),Observer(觀察者模式),
State(狀態模式),Strategy(策略模式),Template Method(模板方法模式),
Chain Of Responsibility(責任鏈模式)。
面試被問到關於設計模式的知識時,可以揀最常用的作答,例如:
工廠模式:工廠類可以根據條件生成不同的子類實例,這些子類有一個公
共的抽象父類並且實現了相同的方法,但是這些方法針對不同的數據進行了不同
的操作(多態方法)。當得到子類的實例后,開發人員可以調用基類中的方法而
不必考慮到底返回的是哪一個子類的實例。
代理模式:給一個對象提供一個代理對象,並由代理對象控制原對象的引
用。實際開發中,按照使用目的的不同,代理可以分為:遠程代理、虛擬代理、
保護代理、Cache 代理、防火牆代理、同步化代理、智能引用代理。
適配器模式:把一個類的接口變換成客戶端所期待的另一種接口,從而使
原本因接口不匹配而無法在一起使用的類能夠一起工作。
模板方法模式:提供一個抽象類,將部分邏輯以具體方法或構造器的形式
實現,然后聲明一些抽象方法來迫使子類實現剩余的邏輯。不同的子類可以以不
同的方式實現這些抽象方法(多態實現),從而實現不同的業務邏輯。
除此之外,還可以講講上面提到的門面模式、橋梁模式、單例模式、裝潢模式
(Collections 工具類和 I/O 系統中都使用裝潢模式)等,反正基本原則就是揀
自己最熟悉的、用得最多的作答,以免言多必失。