所謂設計模式,就是一套被反複使用的代碼設計經驗的總結(情境中一個問題經過證明的一個解決方案)。使用設計模式是為了可重用代碼、讓代碼更容易被他人了解、保證代碼可靠性。設計模式使人們可以更加簡單友善的複用成功的設計和體系結構。将已證明的技術表述成設計模式也會使新系統開發者更加容易了解其設計思路。
在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(指令模式),Interpreter(解釋器模式),Visitor(通路者模式),Iterator(疊代子模式),Mediator(調停者模式),Memento(備忘錄模式),Observer(觀察者模式),State(狀态模式),Strategy(政策模式),Template Method(模闆方法模式), Chain Of Responsibility(責任鍊模式)。
面試被問到關于設計模式的知識時,可以揀最常用的作答,例如:
- 工廠模式:工廠類可以根據條件生成不同的子類執行個體,這些子類有一個公共的抽象父類并且實作了相同的方法,但是這些方法針對不同的資料進行了不同的操作(多态方法)。當得到子類的執行個體後,開發人員可以調用基類中的方法而不必考慮到底傳回的是哪一個子類的執行個體。
- 代理模式:給一個對象提供一個代理對象,并由代理對象控制原對象的引用。實際開發中,按照使用目的的不同,代理可以分為:遠端代理、虛拟代理、保護代理、Cache代理、防火牆代理、同步化代理、智能引用代理。
- 擴充卡模式:把一個類的接口變換成用戶端所期待的另一種接口,進而使原本因接口不比對而無法在一起使用的類能夠一起工作。
-
模闆方法模式:提供一個抽象類,将部分邏輯以具體方法或構造器的形式實作,然後聲明一些抽象方法來迫使子類實作剩餘的邏輯。不同的子類可以以不同的方式實作這些抽象方法(多态實作),進而實作不同的業務邏輯。
除此之外,還可以講講上面提到的門面模式、橋梁模式、單例模式、裝潢模式(Collections工具類和I/O系統中都使用裝潢模式)等,反正基本原則就是揀自己最熟悉的、用得最多的作答,以免言多必失。