1. 程式人生 > >面向介面程式設計的一個例子

面向介面程式設計的一個例子

舉個例子說說介面程式設計的思想魅力所在,假如我們模擬世界上所有的事物,生成一個個的類.現在的是經濟社會,大家都可喜歡談錢的事了.那我們就想知道下每類事物的價錢,價值.咋整?首先想到的自然是讓每個類都提供一個函式,然後計算出自己的價錢.但函式名字咋取?隨便亂取可就亂套了,於是來個介面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);

通過上面的例子你發現面向介面程式設計的美妙了之處了吧.