接口模式

維基百科,自由的百科全書

在系統的設計時刻常常遇到這樣一個問題:Client的實例instanceClient希望使用另一個對象instanceX提供的服務service,但在設計時刻並不能確定對象instanceX究竟屬於哪個類。常見的解決辦法是:將對象instanceX提供的服務service抽象為一個接口ServiceProvider,然後讓對象instanceClient通過持有接口ServiceProvider的實例來使用服務service。這種通過接口間接獲得服務的解決方案就是接口模式

接口模式還可以有一些變化的形式:不止用一個接口抽象一個對象提供的服務,還可以用一組接口抽象一群對象的交互。

效果[編輯]

接口模式有如下效果:

  • 類Client不直接依賴於任何實在(concrete)的服務提供者,而僅僅依賴於輕量的接口,這樣就降低了系統的耦合程度。
  • 因為接口將服務獨立出來,服務的提供者就可以變化。
  • 因為引入了接口來間接提供服務,所以設計方案變得更加複雜。

評論[編輯]

接口模式直接體現了面向對象設計的原則之一:「針對接口編程,而不是針對實現編程」。

許多其他的模式都應用了接口模式,只不過更為特殊。下表列出了作為接口模式特例的其他模式,並且指明了這些模式將哪些服務抽象為接口。

模式 抽象為接口的服務
代理模式 對對象的訪問
抽象工廠模式 創建對象家族
生成器模式 創建多個對象的組合
工廠方法模式 對象的實例化
原型模式 對象的實例化
單例模式 類的唯一實例的創建
命令模式 對請求的處理
迭代器模式 對成員的遍歷
觀察者模式 因目標(Subject)發生變化而作出反映
狀態模式英語State pattern 狀態與狀態的變化
策略模式 算法、策略
訪問者模式 作用於一組對象上的操作