發(fā)布時(shí)間:2012/10/25 來源:長(zhǎng)沙做網(wǎng)站
軟件設(shè)計(jì)模式成為做網(wǎng)站行業(yè)中對(duì)于商端產(chǎn)品必選的設(shè)計(jì)模式。asp.net成為目前做網(wǎng)站行業(yè)里選擇最多最安全的開發(fā)語言。但是對(duì)于低級(jí)開發(fā)者而言,并沒有研究好asp.net所涉及到的軟件設(shè)計(jì)模式,只是簡(jiǎn)單的利用asp.net開發(fā)工具.net中所提供的控件進(jìn)行簡(jiǎn)單的網(wǎng)站開發(fā)。為了讓做網(wǎng)站中的業(yè)內(nèi)人士多了解軟件設(shè)計(jì)模式和asp.net所提供的更深層次的安全開發(fā)模式,長(zhǎng)沙做網(wǎng)站先行者對(duì)同行提供一些軟件設(shè)計(jì)模式所需要的知識(shí)。
在軟件設(shè)計(jì)模式中,類與結(jié)構(gòu)、抽象類與接口這些是必須會(huì)涉及到的,但是開發(fā)者常常對(duì)這些概念并沒有了解深刻,此次長(zhǎng)沙做網(wǎng)站技術(shù)人員詳細(xì)說明接口、類、抽象類、結(jié)構(gòu)四者之間的區(qū)別。
類與結(jié)構(gòu)的區(qū)別:
關(guān)于類的示例代碼:
public class ClassTest
{
int length;
int height;
public void Area()
{
}
}
關(guān)于結(jié)構(gòu)的示例代碼
public struct ClassTest
{
int length;
int height;
public void Area()
{
}
}
從上面的示例代碼中可以看出,類和結(jié)構(gòu)的聲明非常相似,只是一個(gè)修飾符的不同,類的修飾符是class,而結(jié)構(gòu)的修飾符是struct。既然定義類和結(jié)構(gòu)從聲明上相似,那么其具體的區(qū)別是什么呢?那又為什么要用這兩種方式呢?
結(jié)構(gòu)是值類型,值類型在堆棧上分配地址;類是引用類型,引用類型在堆上分配地址。堆棧的執(zhí)行效率要比在堆上的執(zhí)行效率要高,但是堆棧的資源有限,對(duì)于邏輯性比較復(fù)雜的對(duì)象就不太適合了。
結(jié)構(gòu)不能繼承;類可以繼承。
在內(nèi)部結(jié)構(gòu)上,結(jié)構(gòu)不能有protected修飾符,不能使用new,由于不能繼續(xù)所以不能有abstract和seated。
類和結(jié)構(gòu)的使用:
堆棧的空間有限,對(duì)于大量的邏輯的對(duì)象,創(chuàng)建類要比創(chuàng)建結(jié)構(gòu)好一些。
結(jié)構(gòu)表示如點(diǎn)、矩形和顏色這樣的輕量對(duì)象,例如,如果聲明一個(gè)含有 1000 個(gè)點(diǎn)對(duì)象的數(shù)組,則將為引用每個(gè)對(duì)象分配附加的內(nèi)存。在此情況下,結(jié)構(gòu)的成本較低。
在表現(xiàn)抽象和多級(jí)別的對(duì)象層次時(shí),類是最好的選擇。
大多數(shù)情況下該類型只是一些數(shù)據(jù)時(shí),結(jié)構(gòu)時(shí)最佳的選擇。
抽象類與接口的區(qū)別。
抽象類示例代碼:
abstract class Area
{
abstract void AreaMethod();
}
接口的示例代碼:
interface Area
{
void AreaMethod();
}
從聲明上來看抽象類與接口的區(qū)別也是在修飾符上。具體的區(qū)別要在實(shí)際應(yīng)用長(zhǎng)期實(shí)戰(zhàn)中才能理清思路。但是對(duì)于他們的使用可以參考以下幾點(diǎn):
1.如果預(yù)計(jì)要?jiǎng)?chuàng)建組件的多個(gè)版本,則創(chuàng)建抽象類。抽象類提供簡(jiǎn)單的方法來控制組件版本。
2.如果創(chuàng)建的功能將在大范圍的全異對(duì)象間使用,則使用接口。如果要設(shè)計(jì)小而簡(jiǎn)練的功能塊,則使用接口。
3.如果要設(shè)計(jì)大的功能單元,則使用抽象類.如果要在組件的所有實(shí)現(xiàn)間提供通用的已實(shí)現(xiàn)功能,則使用抽象類。
4.抽象類主要用于關(guān)系密切的對(duì)象;而接口適合為不相關(guān)的類提供通用功能。
有一個(gè)比喻來形容接口與抽象類:飛機(jī)與鳥都會(huì)飛因?yàn)樗鼈兝^承了一個(gè)接口“飛”,但是戰(zhàn)斗機(jī)屬于飛機(jī)抽象類,貓頭鷹屬于鳥的抽頭類。