C#2.0學習4—面向對象高級概念

C#2.0學習4—面向對象高級概念

一、接口

1.  接口的概念及作用

一個例子:一臺電腦上的主板和光驅,其實對主板來說,光驅只要是符合它所要求的規格就可以了,具體是哪種光驅,並不重要,它都能兼容。如果我更換一個光驅,沒有必要連主板也換。

當我們需要一個新的對象時,我們首先考慮,能否定義一個和原有對象功能一致的對象(兼容),而不是修改原有對象,或者做一個全新的對象

再如:一個數據庫系統中對數據的SIUD操作,我們應該如何設計呢,假設我們的系統是不能確定具體的數據庫,或者用戶要求變更到新的數據庫時,那我們是否要重新設計整個數據訪問層及與其相關的調用呢?

我們定義一個接口:

interface IDataAccess

{

public bool insert(Item)

public bool delete(string id)

public bool update(Item)

public List getData();

public Item getDataById(string id);

}

如果我們使用Sqlserver

我們就定義一個類實現上述接口

class SqlDataAcess : IDataAcess

{

//具體的sqlServer的操作

}

而在上層程序調用時我們可以簡單的使用如下形式調用

Item item= new Item();

IDataAcess da = new SqlDataAccess(); //此處如果應用反射可從配置文件中直接初始化對象,而不需如此硬編碼

//IDataAcess da = DataAccessFactory.createInstance(Configration.getDataType);

Da.insert(item);

 

現在如果要更換成Oracle,大家想應該如何做了

class OracleDataAcess : IDataAcess

{

//具體的OracleServer的操作

}

再把配置文件中的DataType改爲Oracle就行了,整個系統不用更改其它代碼

如下圖:

 

2.  接口的特性

爲了應對可變化的需求,應該針對接口編程,而非針對具體類編程

針對完成相同功能的程序,要提供一致的程序接口,方便程序的即插即用

代碼的實現是在具體類中,而非接口中,接口只聲明程序的功能,並不實現

二、抽象類

與接口類似,但它可以包含屬性,也可實現方法

 

三、面向對象設計原則

1.單一職責原則(SRP):

一個類應該僅有一個引起它變化的原因。

2.開放封閉原則(OCP):

類模塊應該是可擴展的,但是不可修改(對擴展開放,對更改封閉)

3Liskov 替換原則(LSP:

子類必須能夠替換它們的基類

4.依賴倒置原則(DIP):

高層模塊不應該依賴於低層模塊,二者都應該依賴於抽象。

抽象不應該依賴於實現細節,實現細節應該依賴於抽象。

5.接口隔離原則(ISP):

不應該強迫客戶程序依賴於它們不用的方法。

四、設計模式與多態應用

多態的應用很廣泛,有很多模式都用到它。如:工廠方法,策略,模板模式等

所謂設計模式:是指前人的一種編程經驗。

上面的數據庫系統的例子就是應用到工廠方法模式

一個產品接口:IDataAccess             實現一致的數據操作

兩個具體實現類:SqlDataAccessOracleDataAccess  分別是具體數據庫訪問的實現

一個工廠類:DataAccessFactory 作用爲針對不同的配置,生成不同的DataAccess

示例演示(演員表演節目項目)

用到的模式:工廠方法

多態的應用

 

   

發佈了27 篇原創文章 · 獲贊 0 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章