法則2:針對接口編程,而非(接口的)實現
[ Program To An Interface, Not An Implementation ]
接口
1.接口是一個對象在對其它的對象進行調用時所知道的方法集合。
2.一個對象可以有多個接口(實際上,接口是對象所有方法的一個子集)
3.類型是對象的一個特定的接口。
4.不同的對象可以具有相同的類型,而且一個對象可以具有多個不同的類型。
5.一個對象僅能通過其接口才會被其它對象所瞭解。
6.某種意義上,接口是以一種非常侷限的方式,將"是一種…"表達爲"一種支持該接口的…"。
7.接口是實現插件化(pluggability)的關鍵實現繼承和接口繼承
1.實現繼承(類繼承):一個對象的實現是根據另一個對象的實現來定義的。
2.接口繼承(子類型化):描述了一個對象可在什麼時候被用來替代另一個對象。
3.C++的繼承機制既指類繼承,又指接口繼承。
4.C++通過繼承純虛類來實現接口繼承。
5.Java對接口繼承具有單獨的語言構造方式-Java接口。
6.Java接口構造方式更加易於表達和實現那些專注於對象接口的設計。接口的好處
1.優點:
a.Client不必知道其使用對象的具體所屬類。
b.一個對象可以很容易地被(實現了相同接口的)的另一個對象所替換。
c.對象間的連接不必硬綁定(hardwire)到一個具體類的對象上,因此增加了靈活性。
e.鬆散藕合(loosens coupling)。
f.增加了重用的可能性。
e.提高了(對象)組合的機率,因爲被包含對象可以是任何實現了一個指定接口的類。
2.缺點:
a.設計的複雜性略有增加
(譯者注:接口表示"…像…"(LikeA)的關係,繼承表示"…是…"(IsA)的關係,組合表示"…有…"(HasA)的關係。)接口實例
該方法是指其它的一些類可以進行交通工具的駕駛,而不必關心其實際上是(汽車,輪船,潛艇或是其它任何實現了IManeuverabre的對象)。