面向接口編程的一個例子

舉個例子說說接口編程的思想魅力所在,假如我們模擬世界上所有的事物,生成一個個的類.現在的是經濟社會,大家都可喜歡談錢的事了.那我們就想知道下每類事物的價錢,價值.咋整?首先想到的自然是讓每個類都提供一個函數,然後計算出自己的價錢.但函數名字咋取?隨便亂取可就亂套了,於是來個接口IValuable.接口裏面有函數聲明double GetValue();
於是所有類繼承這個接口,然後用GetValue這個函數去實現計算自己價錢的功能.當然有些事物是無價的,沒法計算.比如人家要問你你家老婆值多少錢啊,你肯定會發火的.當然除非你老婆是幹某個特殊行業的就不在此例了啊.於是我們只讓那些有價的事物去繼承IValuable這個接口

interface IValuable

{

   double GetValue();

}


  有類Car和House繼承了此接口.假如你設計一個軟件輸入Car的牌子或House種類,就會返回是多少錢.於是可以這樣寫代碼


  double money ;

  

   法拉利 car = new 法拉利(); //類法拉得是繼承自Car的一個類

  money = car.GetValue();
 奇瑞QQ qqCar = new 奇瑞QQ();
  money = qqCar.GetValue();

  別墅 house = new 別墅();  //類別墅是繼承自House的一個類
  money = house.GetValue(); 

 

我們發現如果車的各類太多,你這樣用起來不方便,於是想到用多態.於是來個這樣的函數,當然前提是類Car中的函數GetValue聲明爲virtual類型
int GetAllCarsValue(Car car)
 {
    return car.GetValue();
  }
Car car;
double money;
car = new 法拉利();
money = GetAllCarsValue(car);
car = new 奇瑞QQ();
money = GetAllCarsValue(car);
這樣用着挺爽吧.但是你可能還想更爽一點,如果不僅是Car類,或者House類這樣用多態處理.而是把所有的類合到一起用多態處理.你馬上想到在C#類的世界中所有類都繼承自objet,用它貌似可以實現這樣的多態,但object可不給你提供GetValue()這函數,我們想想也知道,如果object針對無數的類定義一些函數,那它就是一個巨無霸了啊.而且既然它是最頂端的父親就得體現所有類的共性,這GetValue也不是所有類的共性啊.


那咋整啊?自然要用到接口了,我們知道用虛函數可以實現多態.但用接口也能實現多態.於是代碼這樣寫
double GetAllClassValue(IValuable iv)
{
   return iv.GetValue();
}

然後這樣調用
IValuable  ivClass;
double money;


ivClass= new 法拉利();
money = GetAllClassValue(ivClass);
ivClass = new 奇瑞QQ();
money = GetAllClassValue(ivClass);
ivClass = new 別墅();
money = GetAllClassValue(ivClass);

通過上面的例子你發現面向接口編程的美妙了之處了吧.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章