我打算通過使用抽象工廠模式來解決特定問題。我成功地實現工廠模式,但無法工廠模式擴展到抽象工廠在C中實現不同異常提供程序的抽象工廠模式#
我有兩個不同的地方異常詳細信息可存儲
- 文件系統
- 數據庫
我用工廠模式從客戶端抽象了客體創建細節
Int erface
public interface ILogException
{
void LogException();
}
FileSystemLogger
public class FileExceptionLogger : ILogException
{
public void LogException()
{
Console.WriteLine("File Exception Logger");
}
}
DBSystemLogger
public class DBExceptionLogger : ILogException
{
public void LogException()
{
Console.WriteLine("DB Exception Logger");
}
}
工廠實現
public class ExceptionFactory
{
const int i = 1;
public static ILogException GetFactory()
{
if (i == 1)
{
return new FileExceptionLogger();
}
else if (i == 2)
{
return new DBExceptionLogger();
}
else
{
return new ServiceExcetionLogger();
}
}
}
我知道這不是最好的實施,但我打算改變它。
現在FileSystemLogger
和DatabaseLogger
是本身就是一個工廠,我想組以下FileSystemLogger
和DatabaseLogger
下實施,使客戶能有FileSystemLoggerFactory
和DatabaseLoggerFactory
FileSystemLogger
- FlatFileSystemLogger
- XMLFileSystemLogger
DatabaseLogger
- SQLSERVERLogger
- OracleLogger
我應該如何着手定義FileSystemLoggerFactory
和DatabaseLoggerFactory
?
感謝您的寶貴意見。建議的實現是否符合抽象工廠的要求? – rohit
@rohit它不完全是一個「工廠」,因爲ILoggerException接口不提供創建新實體的方法。 – McGarnagle
@rohit如果你不想使用泛型,你需要*某種方式來確定返回哪個實現。你面臨的問題是,使用你的庫的編碼器是否決定?是否有一些配置或者項目類型決定了它?或者如何? – McGarnagle