簡介
接口模式還可以有一些變化的形式:不止用一個接口抽象一個對象提供的服務,還可以用一組接口抽象一群對象的互動。
效果
接口模式有如下效果:
•類Client不直接依賴於任何實在(concrete)的服務提供者,而僅僅依賴於輕量的接口,這樣就降低了系統的耦合程度。
•因為接口將服務獨立出來,服務的提供者就可以變化。
•因為引入了接口來間接提供服務,所以設計方案變得更加複雜。
評論
接口模式直接體現了面向對象的系統設計的原則之一:“針對接口編程,而不是針對實現編程”。
許多其他的模式都套用了接口模式,只不過更為特殊。下表列出了作為接口模式特例的其他模式,並且指明了這些模式將哪些服務抽象為接口。
| 模式 | 抽象為接口的服務 |
| 代理模式 | 對對象的訪問 |
| 抽象工廠模式 | 創建對象家族 |
| 生成器模式 | 創建多個對象的組合 |
| 工廠方法模式 | 對象的實例化 |
| 原型模式 | 對象的實例化 |
| 單例模式 | 類的唯一實例的創建 |
| 命令模式 | 對請求的處理 |
| 疊代器模式 | 對成員的遍歷 |
| 觀察者模式 | 因目標(Subject)發生變化而作出反映 |
| 狀態模式 | 狀態與狀態的變化 |
| 策略模式 | 算法、策略 |
| 訪問者模式 | 作用於一組對象上的操作 |
設計模式
在軟體工程中, 設計模式(design pattern)是對軟體設計中普遍存在(反覆出現)的各種問題,所提出的解決方案。這個術語是由埃里希·伽瑪(Erich Gamma)等人在1990年代從建築設計領域引入到計算器科學的。
設計模式並不直接用來完成代碼的編寫,而是描述在各種不同情況下,要怎么解決問題的一種方案。面向對象設計模式通常以類別或對象來描述其中的關係和相互作用,但不涉及用來完成應用程式的特定類別或對象。設計模式能使不穩定依賴於相對穩定、具體依賴於相對抽象,避免會引起麻煩的緊耦合,以增強軟體設計面對並適應變化的能力。
並非所有的軟體模式都是設計模式,設計模式特指軟體“設計”層次上的問題。還有其他非設計模式的模式,如架構模式。同時,算法不能算是一種設計模式,因為算法主要是用來解決計算上的問題,而非設計上的問題。
隨著軟體開發社群對設計模式的興趣日益增長,已經出版了一些相關的專著,定期召開相應的研討會,而且沃德·坎寧安(Ward Cunningham)為此發明了WikiWiki用來交流設計模式的經驗。
