現在所說的面向介面程式設計,是很重要的乙個原則,大部分的設計模式的基礎。介面的一些知識確實比較晦澀,需要總結一下。開閉原則告訴我們,只要有可能就應該把類的公共部分設計為介面,而不是特定的類型別,這樣就可以讓方法有非常大的靈活性。
乙個應用程式首先需要定義角色,然後抽象出關於這個角色的方法,把他們放在乙個介面中,可以很好的降低程式之間的耦合性。
介面當然是不能實體化的了,因為他沒有構造器,但是卻可以宣告它為乙個引用,讓它去指向某個和他型別相同即已經實現了該介面方法的物件。比如iteacher t;這個t相當於委託的作用,委託到乙個屬性或者方法,到底是哪個方法,就要看之前宣告的是哪個物件,介面變數實現的是這個物件的方法。
如果乙個類實現多個介面,它的物件就有能力扮演應用程式中的多種身份或角色,比如說有乙個介面iteacher,另乙個iadministrator.乙個類professor實現了這2個介面,也就是說乙個教授有可能是教師有可能是領導。
不用介面的例子:不用介面的例子:
public class course
set}
}客戶**:
course c = new course("math");
professor p = new professor("zhoulu");
c.teachingassistant = p;//把助教指定為zhoulu
假如我想把professor改為student,那麼就要改動很多**,幾乎要重寫。現在來看看用介面實現的方式。
public class course
set}
}inte***ce iteacher
//客戶**如下:
course c = new course("math");
professor p = new professor("zhoulu");
c.teachingassistant = p;
p.agreetoteach();
現在我想把professor改為student,只要修改2行**:實體化student類,介面變數委託給teachingassisant
student s = new student("miaofang");
c.teachingassistant = s;
可見介面的威力是多麼巨大,這裡快速的響應需求變化,只需要改客戶**就可以了。因為類都實現了該介面,所以介面變數(委託)就可以根據具體指向哪個物件來套用那個物件的方法。非常重要的乙個思想。
在.net framework中,有乙個介面ilist,所有的集合類都實現了這個介面,那麼我們就可以把ilist list當作某個方法的引數,用類似的方法去看具體是操作那個的物件,使arraylist,or hashtable。
public class class1
}
併發程式設計之深入理解Lock介面
寫乙個執行緒不安全的 public class unsafethread public static void main string args catch interruptedexception e countdownlatch.countdown start while true 這裡的cou...
深入BREW介面機制
初學brew時,最煩人的就是介面的定義了,一大堆的巨集,讓人不知所云。這裡,將以helloworld為例,我們一步一步揭開它的神秘面紗。typedef struct helloworld helloworld typedef struct struct declare vtbl 又是什麼?它的巨集定...
深入了解介面
介面是元件之間的協議,描述了元件對外提供的服務。從技術上講介面是一組包含了函式型方法的資料結構。通俗理解 就是飛機會飛,鳥會飛,他們都繼承了同乙個介面 飛 但是f22 屬於飛機抽象類,鴿子屬於鳥抽象類。介面就是為了約束方法的格式 引數和返回值型別 而存在 乙個介面最好只能做一件事 因為子類只有乙個直...