在C#裡,微軟官方給予它的定義,略有不同 ,以下是微軟官方的說明:
abstract 修飾詞表示要修飾的項目遺失或實作不完整。 abstract 修飾詞可用於類別、方法、屬性、索引子 (Indexer) 和事件。 在類別宣告裡使用 abstract 修飾詞,表示該類別只是當做其他類別的基底類別而已。 成員如果標記為抽象,或是包含在抽象類別 (Abstract Class) 內,則必須由衍生自此抽象類別的類別實作這個成員。
在Design Pattern的思維裡,有一種運作結構,叫作「Abstract Factory」。
在複雜的程式架構中,將許多的組件加以分門別類,然後從中取出性質相似與功能相近的Object,使其集中,能夠簡化程式系統組件的複雜度。而 Abstract Factory 模式,正是用來協助程式員將Object分類與集中管理的方法。
以下是C# Abstract Factory的簡單範例:
public interface IHouseA
{
//執行的方法陳述句
}
public interface IHouseB
{
//執行的方法陳述句
}
public interface IHouseFactory
{
IHouseA CreateHouseA();
IHouseB CreateHouseB();
}
上面的結構,基本上是Factory Pattern,也就是說,透過Interface,將IHouseA和IHouseB分別獨立出來,在經由IHouseFactory做管理,所以程式員只要更改個別的陳述句,並不會影響其它函式。
public class HouseA_Door : IHouseA
{
internal HouseA_Door()
{ /*建構函式 */}
}
public class HouseB_Window : IHouseB
{
internal HouseB_Window()
{ /* 建構函式 */}
}
public class HouseA_Chair : IHouseA
{
internal HouseA_Chair()
{ /* 建構函式 */}
}
public class HouseB_Desk : IHouseB
{
internal HouseB_Desk()
{ /* 建構函式 */}
}
HouseA和HouseB分別繼承IHouseA和IHouseB,然後各別去建構自身的House裡的內容。但本質上是2個不同的House,只是裡面的裝飾,可以任君擺設,自行建構函式。
public class SmallHouseFactory : IHouseFactory
{
public IHouseA CreateHouseA()
{
return new HouseA_Door();
}
public IHouseB CreateHouseB()
{
return new HouseB_Window();
}
}
public class BigHouseFactory : IHouseFactory
{
public IHouseA CreateHouseA()
{
return new HouseA_Chair();
}
public IHouseB CreateHouseB()
{
return new HouseB_Desk();
}
}
各個Class透過Abstract Factory的分門別類,再透過Interface各別獨立,只要透過繼承,程式員就可以輕易的修改而不影響流程架構。
-雲遊山水為知已逍遙一生而忘齡- 電腦神手
沒有留言:
張貼留言