C#設計模式之抽象工廠(AbstractFactory)
2024-07-21 02:18:10
供稿:網友
1. 為什么要用抽象工廠?用抽象工廠的好處
這里我暫時還想不出有什么好處
我覺得就是利用接口來實現封裝其子類,讓具體的工作交給它的子類去做。所以說這應該不能算抽象工廠的優點,只能算作接口的優點。
2. 在c#中怎樣用抽象工廠?
好,我們來看一下怎么來實現
比如說我們要寫一個連接數據庫的組件,既支持sqlserver的,又要支持oledb的,這時我們就可以用abstractfactory設計模式了。
先定義一個接口:
public interface idbhelper
{
void executenonquery();
dataset executefordataset(string sql);
}
然后定義兩個類(一個是sqlserver的,一個是oledb的)來繼承idbhelper這個接口:
internal class sqldbhelper:idbhelper
{
public sqldbhelper()
{
}
public void executenonquery()
{
}
public dataset executefordataset(string sql)
{
//這里實現sqlserver的方法
return null;
}
}
internal class oledbhelper:idbhelper
{
public oledbhelper()
{
}
public void executenonquery()
{
}
public dataset executefordataset(string sql)
{
//這里實現oledb的方法
return null;
}
}
然后,來定義一個工廠類:
public class dbhelperfactory
{
public static idbhelper createdbhelper(int dbtype)
{
switch(dbtype)
{
case 1:
return new sqldbhelper();
case 2:
return new oledbhelper();
default:
return null;
}
}
}
最后我們來調用這個工廠類:
public class abstractfactorytest
{
public void testmethod()
{
idbhelper sqldb=dbhelperfactory.createdbhelper(1);
sqldb.executenonquery();
}
}
這個時候我們就可以很方便的調用數據庫組件了,在調用createdbhelper方法時,傳入參數為1,那么就是調用sqldbhelper這個類,傳入參數為2,那么就是調用oledbhelper這個類。當然傳入的參數你還可以把它變為枚舉型,這樣就更加方便了。
這樣的寫法也更利于擴展,比如說以后要添加一個oracledbhelper時,你只需要再添加一個類,改動一個方法(createdbhelper)就可以了。