接口的意义及于抽象类的区别(蒋波涛)
生活随笔
收集整理的這篇文章主要介紹了
接口的意义及于抽象类的区别(蒋波涛)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
插件式框架作為一個高耦合低聚合的系統,它的功能定義與功能實現之間是分離的,這種策略是高耦合實現的保證。插件式框架好像一個功能聚集站,它對外界宣布,只要符合它發布的某種規范的組件(實現接口的類通常稱為組件)都可以加入到這個平臺中,而這些組件到底是做什么事情的,框架并不關心,當然,框架也提供了一些必要的信息和幫助保證這些組件能夠正常實現它們的功能。 橋接模式是一種被認可的表示定義和與之關聯的實現的方式,它和工廠(Factory)模式為所有的應用提供了基礎。使用橋接模式開發的組件具有為了一個共同目標而多方協同工作除某些必須實現的接口外無需彼此交互的優點 在具有多個邏輯層的程序設計中,各層之間的通訊大多通過接口實現,由于接口不會輕易改變,如果一個層的代碼發生變化,它不會影響其它層的功能;只要實現接口的組件功能正確,那么這個程序運行就更無問題。這種做法使得各層之間的影響降低到最低程度。 接口是是類型一般行為的定義和契約。例如交通工具都包含啟動、停車、加速和減速等方法,但作為交通工具的具體類型,不同車輛之間的操作是不一樣的。接口并不考慮它們各自采用什么方式實現這些功能,但是,它們都必須有這些基本的功能。接口只負責定義而不考慮實現,我們也不能產生一個接口的實例對象(Instance)。 實現了接口的類或結構都必須實現接口中定義的每一個方法,這些方法在設計上往往是相關的。 接口與抽象類非常相似,例如兩者都不能產生實例對象,都可以作為一種契約和定義使用。但接口和抽象類仍有本質的不同,這些不同包括: l???????? 抽象類可以包含某些實現代碼,但接口沒有任何實現部分; l???????? 抽象類可以包含字段而接口沒有; l???????? 接口可以被結構(Struct)繼承,但抽象類不行; l???????? 抽象類可以有構造函數和析構函數,而接口都沒有; l???????? 抽象類可以繼承自其它類和接口而接口僅僅能繼承自接口; l???????? 接口支持多繼承而抽象類僅僅支持單根繼承。 下面是抽象類和接口的對比例子: #001 public abstract class AClass { #002 ????abstract public void MethodA (int a); #003 ????abstract public void MethodB (int a); #004 ????abstract public void MethodC (int a); #005 ????abstract public void MethodD (int a); #006 } #001 public interface IInterface { #002 ????void MethodA (int a); #003 ????void MethodB (int a); #004 ????void MethodC (int a); #005 ????void MethodD (int a); #006 } 即使不從橋接模式的觀點考慮,多種面向對象語言都引入了接口這種類型定義還有一個重要原因:一個類可以實現多個接口。在大部分面向對象語言中,多重繼承都是被禁止的,這是因為當編譯器需要找到虛方法的正確實現時,會出現不確定性。但是接口并沒有實現的部分,實現多個接口,并非意味著類(Class)那樣的繼承,它也絕非是多重繼承機制的替代品。 我們常常將接口與抽象類混淆,事實上,兩者的表象過于一致。但接口用來定義兩個對象通信的契約,抽象類用來封裝對象間公用的行為;抽象類應主要用于關系密切的對象,而接口最適合為不相關的類提供通用功能。二者設計起初的目標完全不同,但在實際應用中被太多的人誤解。這個原理在ArcObjects庫中顯露無遺:不同類型的組件互相調用是通過接口,而同一類型的對象群,如Color,則是通過抽象類組織在一起的,即接口是對外通訊的,抽象類是對內組織的。
轉載于:https://www.cnblogs.com/zhangwei4573/archive/2009/12/28/1633924.html
總結
以上是生活随笔為你收集整理的接口的意义及于抽象类的区别(蒋波涛)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 刚学GDI+和.Net WinForm控
- 下一篇: js中function参数默认值