C# 介面作用的深入理解

衣舞晨風發表於2015-04-07

原文地址:http://blog.jobbole.com/85751/

假設我們公司有兩種程式設計師:VB程式設計師,指的是用VB寫程式的程式設計師,用clsVBProgramer這個類表示;Delphi程式設計師指的是用Delphi寫程式的程式設計師,用clsDelphiProgramer這個類來表示。每個類都有一個WriteCode()方法。定義如下:

class clsVBProgramer()
{
....
WriteCode()
{
     //用VB語言寫程式碼;
}
....
}

class clsDelphiProgramer()
{
....
WriteCode()
{
    //用Delphi語言寫程式碼;
}
   ....
}

現在公司來了一個專案,要求派某個程式設計師寫一個程式。

class clsProject()
{
....
WritePrograme(clsVBProgramer programer)//用VB寫程式碼
{
    programer.WriteCode();
}
WritePrograme(clsDelphiProgramer programer)//過載方法,用Delphi寫程式碼
{
    programer.WriteCode();
}
......
}

在主程式中我們可以這樣寫:

main()
{
   clsProject proj=new clsProject;
   //如果需要用VB寫程式碼
   clsVBProgramer programer1=new clsVBProgramer;
   proj.WritePrograme(programer1);
   //如果需要用Delphi寫程式碼
   clsDelphiProgramer programer2=new clsDelphiProgramer;
   proj.WritePrograme(programer2);
}

但是如果這時公司又來了一個C#程式設計師,我們怎麼改這段程式,使它能夠實現用C#寫程式的功能呢?我們需要增加一個新類clsCSharpProgramer,同時在此clsProject這個類中要再次過載WritePrograme(clsCSharpProgramer programer)方法。這下麻煩多了。如果還有C程式設計師,C++程式設計師,JAVA程式設計師呢。麻煩大了!

但是如果改用介面,就完全不一樣了:
首先宣告一個程式設計師介面:

interface IProgramer()
{
WriteCode();
}
然後宣告兩個類,並實現IProgramer介面:
class clsVBProgramer():IProgramer
{
....
WriteCode()
{
     //用VB語言寫程式碼;
}
....
}
class clsDelphiProgramer():IProgramer
{
....
WriteCode()
{
    //用Delphi語言寫程式碼;
}
   ....
}
對clsProject這個類進行一下修改:
class clsProject()
{
....
WritePrograme(IProgramer programer)
{
    programer.WriteCode();//寫程式碼
}
......
}
 
main()
{
   clsProject proj=new clsProject;
   IProgramer programer;
   //如果需要用VB寫程式碼
   programer=new clsVBProgramer;
   proj.WritePrograme(programer);
   //如果需要用Delphi寫程式碼
   programer=new clsDelphiProgramer;
   proj.WritePrograme(programer);   
}

如果再有C#,C,C++,JAVA這樣的程式設計師新增進來的話,我們只需把它們相關的類加進來,然後在main()中稍做修改就OK了。擴充性特別好!

另外我們如果把clsProject這個類封成一個元件,那麼當我們的使用者需要要擴充功能的時候,我們只需要在外部做很小的修改就能實現,可以說根本就用不著改動我們已經封好元件!是不是很方便,很強大!






相關文章